diff --git a/doc/CONTRIBUTORS.html b/doc/CONTRIBUTORS.html
new file mode 100644
index 0000000..ba9ab62
--- /dev/null
+++ b/doc/CONTRIBUTORS.html
@@ -0,0 +1,569 @@
+
+
+The following organisations and people have contributed to the Bouncy Castle Cryptography Package.
+
+Thanks, may your castles never deflate!
+
+
+Donors
+
+
+The following people and organisations donated financially to help with the release of Bouncy Castle:
+
+AXL Software, Larry West (California), A-Sher (1.77). EduFer (1.72). Miguel, Rodolfo Hansen, and iterate GmbH (1.69). Encryptomatic.com (1.67). Denis Beurive, Ravi_02, and Manuel Corona (1.66). Christian Kahlo, Alexi Livshitz, and Denis Beurive (1.65). Joshua Hight (1.63). Bihari Babu (1.61). Jens Neuhalfen and perillamint (1.60). Brian Reid (1.59). Joop Kaashoek and Pexus LLC (1.57). DidiSoft, Cotiviti, Atanas Krachev, Encryptomatic LLC, LogicalAnswersIncSupporter (1.56). Digistamp, RAM NAG (1.55). Lobster GmbH (1.54). Sheba, Ishmal Bartley, and Li-Chang Johnny Lo (1.53). lecker@buetterchen.de, Charles Proxy, Gunny Mills, Morgan Le Douget, Ben Whitaker, and Emilio Navarrete Lineros (1.52). Gup & Boz @ Alki Seattle, Bytemine Gmbh, Ted Pennings, Atanas Krachev, PrimeKey Solutions AB, Martin Paljak, CorseraFri19980116, CPU Terminator, Lindsay Bradford, kares, Philius, and Aaron Anderson (1.51).
+
+
+We also wish to acknowledge financial and collaborative support from CISCO and additional financial support from PrimeKey towards developing the EST API for RFC 7030 support.
+
+
+Organisations
+
+
+
Holders of Keyfactor Support Contracts. Without the consulting time left over from support contracts being contributed back to working on the Bouncy Castle APIs, progress would be impossible. You know who you are!
+
+University of Adelaide, Dr. Yuval Yarom and Deepak Bhargavan Pillai, and University of Melbourne, Dr. Chitchanok Chuengsatiansup, technical review and analysis of the Java PQC implementations and advice on remediations to address possible security issues found.
+
+
+Monash University, Cyber Security Lab, under the supervision of A. Prof. Ron Steinfeld, Dr. Amin Sakzad, and Dr. Raymond K. Zhao for contributions to the NIST post-quantum algorithm set. Initial NTRU implementation: Akbar Fadiansyah. Initial Falcon implementation: Zi Li Tan. Initial CRYSTALS-Kyber implementation: Salang Kang. Initial NTRU Prime implementation: Sai Agraharam (saicharan.agraharam@gmail.com). Initial CRYSTALS-Dilithium implementation: Salang Kang.
+
+
+University of Wollongong, Institute of Cybersecurity and Cryptology, under the supervision of Dr Dung Duong <hduong@uow.edu.au> for contributions to the NIST post-quantum algorithm set. Initial BIKE implementation: Tuong Ngoc Nguyen <tuong.nguyenng@gmail.com>, Xuan Thanh Khuc <khucxuanthanh@gmail.com>, and Khanh Nguyen <tungkhanhmta@gmail.com>. Initial HQC implementation: Tuong Ngoc Nguyen <tuong.nguyenng@gmail.com>, Xuan Thanh Khuc <khucxuanthanh@gmail.com>, and Khanh Nguyen <tungkhanhmta@gmail.com>.
+
+
Grier Forensics, for collaborating in the development of the S/MIME Toolkit and DANE SMIMEA functionality.
+
TU-Darmstadt, Computer Science Department, RBG, for the initial
+lightweight client side TLS implementation, which is based on MicroTLS and for help with qTESLA implementation. MicroTLS was developed by Erik Tews under the supervision of Dipl.-Ing. Henning Baer and Prof. Max Muehlhaeuser. qTESLA assistance was provided by Nina Bindel and Yinhua Xu.
+
+
TU-Darmstadt, Computer Science Department, RBG, for the initial
+Post Quantum provider, which was based on the FlexiProvider. The FlexiProvider was developed
+by the Theoretical Computer Science Research Group at TU-Darmstadt, Computer Science Department, RBG under the supervision of Prof. Dr. Johannes Buchmann. More information on the history of FlexiProvider can be found at:
+https://www.flexiprovider.de/
+
+
Voxeo Labs - sponsorship of the initial development of APIs for DTLS 1.0 (RFC 4347), DTLS-SRTP key negotiation (RFC 5764),
+and server side TLS 1.1 (RFC 4346) and tested WebRTC compatibility. More information on Voxeo Labs can be found at https://voxeolabs.com
+
Core Infrastructure Initiative - financial support towards developing the TLS API and JSSE provider that appeared in 1.56.
+
Additional CertPath testing and validation data from the CertPath testing tool developed by cryptosource GmbH and media Transfer AG both located in Darmstadt, Germany.
+
Micro Focus - additional support towards further developing the TLS/DTLS API and the BCJSSE provider.
Tito Pena <Fortunato.Pena@AdNovum.CH> - initial RC5 (32 and 64) implementation.
+
Michael Lee <yfl@mira.net> - initial RC6 implementation, MD2 implementation
+
Nuno Santos <nsantos@student.dei.uc.pt> - finding toString bug in certificate object.
+
Brett Sealey <bretts@mortbay.com> - fixing the missing return problem in JDKKeyFactory (affected SSLeay private keys).
+
Victor A. Salaman <salaman@teknos.com> - fixing the bug in Cipher.java which caused it to ignore specified providers, fixing the bug in RSAKeyGenerator which caused keys to be occasionally produced 1 bit too small.
+
Eran Librach <eranl@valicert.com> - spotting and fixing the classLoader bug that occurs if javax.crypto and the provider aren't sharing the same classpath (occurs in JDK 1.3 and greater).
+
Jonathan Knudsen <jonathan@LearningPatterns.com> - porting
+information and restrictions when using the lightweight library with the
+MIDP environment.
+
Markus Niedermann <markus.niedermann@softwired-inc.com> - porting
+information and restrictions when using the lightweight library with the
+MIDP environment.
+
Mike Benham <moxie@thoughtcrime.org> - detection and fixing of an
+incorrect weak key in the DES key generation support classes. Suggestions
+for simplifying DESedeParameter objects. Optimisations for the Blowfish engine
+and BufferedBlockCipher class.
Uwe Guenther <uwe@cscc.de> - detection and fixing of 3 incorrect semi-weak keys in the DES key generation support classes.
+
Markus Bradtke <mab@informatik.uni-kiel.de> - fixing of a logic
+error in the JDKKeyStore class.
+
Waclaw Sierek <waclaw.sierek@tpg.pl> - fix to setOddParity in
+the DESParameter class. Assistance with adding ordering to X509 names for
+certificate generation, proper processing of byte strings in the ASN1
+package, further simplifications and additional classes to improve pkcs7
+support, bug fixes in CertPath API.
+
Ly-Na Phu <lyna.phu@init-consulting.de> - assistance in the
+addition of ISO 9796-1 padding.
+
Stefan Köpsell <sk13@mail.inf.tu-dresden.de> - making the jdk 1.1
+version of the collections API available. For further details see
+https://sourceforge.net/projects/jcf/
+
Carmen Bastiaans <cbastiaa@microbits.com.au> - fixing the improper
+null pointer problem in the setting of certificates in the PKCS12 key store.
+
Tomas Gustavsson <tomasg@primekey.se> - initial implementation of the AuthorityInformationAccess, SubjectKeyIdentifier, AuthorityKeyIdentifier, CRLNumber, CRLReason, CertificatePolicies, V2TBSCertListGenerator, and X509V2CRLGenerator classes in the ASN.1 library. Additions to GeneralName class, other bug fixes in the X.509 package. Initial implementation of the CertificationRequest classes. getRevocationReason() patch for OCSP. Patch to SemanticsInformation to prevent ClassCastException.
+
Eugen Kuleshov <euxx@hotmail.com> - optimisations for Blowfish, assistance with PKCS12/keytool interoperability.
+
Megan Woods <meganwoods@sekurafile.com> - initial implementation of
+ECIES.
+
Christian Geuer-Pollmann <geuerp@apache.org> -
+adding IV's to the AESWrap implementations. Initial implementation of
+DESedeWrap.
+
Michael Mühle <michael@mouling.de> - contributing the initial CertPath implementation and compatibility classes, fixing provider bug in JDK 1.1 java.security.cert.CertificateFactory compatibilty class.
+
Michael Mansell <me@michaelmansell.com> - fixing the parsing of the empty DER set in the ASN.1 library.
+
Eike Recker <eike.recker@gmx.de> - fixing misspelling of provider reference for RSA/1 and RSA/2.
+
Chris Southern <CSouthern@baltimore.com> - fixing misuse of specified provider in the PKCS10 certification request class.
+
Sidney Markowitz <sidney@sidney.com> - fixing null pointed exception on unknown OID in X509Name class, initial implementation of the three AES engines.
+
Chris Kerr <ckerr@filonet.ca> - initial implementation of the cms,
+asn1.cms, and the mail/smime packages,
+assistance in simplifying the ASN.1 package, miscellaneous other optimisations,
+NIST CertPath certification test, PKIXPolicyNode class, CertPath subtree validation and policy tree construction. We also
+wish to acknowledge the generosity of Filonet
+Corporation for allowing Chris to make the initial cms and mail/smime packages available to us.
+
Mike Bean <mbean@lucentradius.com> - fixing the fall through bug
+in the IV algorithm parameters class.
+
Martin Petraschek <e9526225@student.tuwien.ac.at> - fixing ASN1
+tagging so tag values up to 30 are now supported.
Jason Novotny <jdnovotny@lbl.gov> - initial work on the openSSL PEM processing.
+
Joel Hockey <joel.hockey@qsipayments.com> - initial work on the openSSL PEM processing.
+
John Steenbruggen <JohnS@geotrust.com> - fixing CertificationRequestInfo to handle cert request info objects without attribute blocks.
+
Justin Chapweske <justin@chapweske.com> - ordering patch for Tiger message digest.
+
John Serock <jserock@hotmail.com> - fixing null pointer exception
+in constructor for ExtendedKeyUsage. Fixing of base OID bug in KeyPurposeId.
+Compliance of KeyUsage extension return value with security API.
Andre Wehnert <aw5@mail.inf.tu-dresden.de> - fixing key schedule problem in RC5-64, fixing buffer cleaning issue in buffered block cipher.
+
Luigi Lo Iacono <lo_iacono@nue.et-inf.uni-siegen.de> - adding SIC
+mode to the blockciphers in the provider.
+
Tim Sakach <tsakach@certivo.net> - SMIME v2 compatibility patches.
+
Marcus Povey <mpovey@brookes.ac.uk> - adding the PGP mode to the lightweight API and the provider.
+
Sebastian Clauß <sc2@inf.tu-dresden.de> - adding randomness setting
+to the certificate and CRL generators.
+
Nicolas Bielza <nicolas.bielza@alligacom.com> - isolating the tagging bug in the ASN.1 library that was misrepresenting some ASN.1 constructed data types. Contributions to the streaming S/MIME classes.
+
Casey Marshall <rsdio@metastatic.org> - fixing the clone problem with Macs in the clean room JCE.
+
Rick Zeldes <rick.zeldes@eds.com> - initial code for CMS/SMIME CompressedData.
Brett Neumeier <random@rnd.cx> - patch to OriginatorIdentifierOrKey object, improvements to encoders package, introduction of UrlBase64.
+
Graham Coles <graham.coles@retail-logic.com> - patch to isParityAdjusted in DESKeySpec.
+
Jörn von Kattchée <J.Kattchee@seeburger.de> - patch to SMIMEGenerator for preventing class cast exceptions with BodyParts containing Multipart objects.
+
Matteo Artuso <matartuso@libero.it> - picking up the possible overead in ASN1InputStream.
+
Julian Morrison <julian@extropy.demon.co.uk> - spotting the slow down
+in Diffie-Hellman key generation.
+
Elmar Sonnenschein <eso@esomail.de> - fix to long conversion in clean room
+SecureRandom.
+
Jörn Schwarze <JSchwarze@ulc.de> - Locale fix for the clean room JCE.
+
Bryan Lovquist <bkl@cps.com.au> - Other provider compatibility fixes for CMS signing.
+
Artem Portnoy <Artem_Portnoy@ibi.com> - generalisations for CMSProcessableBodyPart in S/MIME. Header fix for mime messages.
+
Michael Häusler <haeusler@ponton-consulting.de> - missing OID update for SHA1 with RSA Signature.
+
Johan Seland <johans@netfonds.no> - general toString for BigInteger class.
+
Johannes Nicolai <johannes.nicolai@novosec.com> - further enhancements to OCSP response generation, fix to CertificateID issuer.
+
Marc Doberva <marc.doberva@ilex-si.com> - help in isolating the JSSE/BC RSA key issue.
+
Jan Dvorak <jan.dvorak@mathan.cz> - initial implementation of the light weight Null block cipher.
+
Joe Cohen <jcohen@forumsys.com> - converting the ArrayOutOfBoundsException in DERInputStream into what it should have been.
+
Chris Long<aclong@ece.cmu.edu> - adding public key decoding to PEMReader.
+
Hes Siemelink<hes@izecom.com> - findIssuer fix for CertPathBuilder, toMimeMessage converter for Mail API, getSize() fix for zero length messages in SMIMEMessage.
+
Stefan Puiu<stefanpuiuro@yahoo.com> - initial implementation V3 policy mapping, policy qualifier objects in ASN.1 X.509 package.
+
Kaiser Yang <kaiseryang@yahoo.com> - Finding BigInteger loop problem in prime generation.
+
Jiri Urbanec <jiri.urbanec@logicacmg.com> - patch to fix defect in DERBMPString.equals().
+
Justin Kolb <jkolb@pristx.com> - patch to DSA signature generation in OpenPGP. Fix for the unexpected "Unexpected end of ZLIB input stream" exception.
+
Ralf Hauser <ralfhauser@gmx.ch> - patch to exception handling in PublicKeyRing, PEMReader, 1.4 build script, X509 Certificate Factory, CertPathValidatorUtilities, fromAddress null check in SignedMailValidator, ReadOnceInputStream testing utility in MIME tests.
+
Michal Dvorak <M_Dvorak@kb.cz> - getNextUpdate patch for OCSP SingleResp.
+
Klaus Greve Fiorentini <Klaus@cpqd.com.br> - array fix in PGP PublickKeyEncSessionPacket.
Mariusz Bandola <mariusz.bandola@cryptotech.com.pl> - patch to DERGeneralizedTime. Compliance patch for OCSP TBSRequest class. Patch to X509Name for delaing with general objects in sequences.
+
Brien Oberstein <brien.oberstein@transacttools.net> - patch to S2K algorithm in OpenPGP, initial PGP version 3 secret key support, initial PGP version 3 signature generation, RIPEMD160 addition to PGPUtil.
+
Ian Haywood <ian@haywood.bpa.nu> - addition of getSignatureType to PGPSignature.
+
Jonathan Edwards <s34gull@mac.com> - initial support for reading multiple rings from a PGP key file.
+
Andrew Thornton <andrew@caret.cam.ac.uk> - patch for RSA PUBLIC KEY in PEMReader.
+
Gregor Leander <gl@bos-bremen.de> - initial parsing of multiple sequence entries in an X.500 Name.
+
Antoon Bosselaers <Antoon.Bosselaers@esat.kuleuven.ac.be> - help with RipeMD320 implementation.
+
Peter Sylvester <Peter.Sylvester@edelweb.fr> - improvements to the ASN.1 BasicConstraints object.
+
Doug <ummmmm@myrealbox.com> - addition of isEncryptionKey method to OpenPGP public keys.
+
Francois Staes <fstaes@netconsult.be> - improvements to DEBitString, DERGeneralizedTime and initial implimentation of DERGeneralString, addition of settable signed object info to CMSSignedDataGenerator, patch to DH key agreement.
+
W.R. Dittmer <wdittmer@cs.vu.nl> - patch to decoding of SignatureCreationTime in BCPG. Patch to PGPKeyPair to fix nullpointer exception.
+
Perez Paz Luis Alberto <laperez@banxico.org.mx> - patch to use of BitString in X.500 name.
+
James Wright <James_Wright@harte-hanks.com> - patches for dealing with "odd" ArmoredInputStreams.
+
Jim Ford <jim@muirford.com> - patch to PGPSecretKey to avoid null pointer exception on encoding secret keys, comments on KeyExpirationTime, getBitStrength for ElGamal keys. Signature creation time patch for newly created v4 signatures.
+
Michael Hausler <haeusler@ponton-consulting.de> - extra aliases for provider.
+
Sai Pullabhotla <psai@linoma.com> - fix to PGP compressed data generator to improve compression levels. Performance improvements for KeyBasedLargeFileProcessor.
+
Joseph Miller <joseph@digiweb.net.nz> - addition of ZeroBytePadding.
+
Lars <xyz@sagemdenmark.dk> - patch to explicit padded mode for CBC block cipher MAC.
+
Jeroen van Vianen <jeroen@vanvianen.nl> - the Signed and Encrypted mail example.
+
Jun Sun <JSun@diversinet.com> - patch to SecureRandom to work around problem in wtk 1.0.4 and wtk 2.1.
+
Petr Dukem <pdukem@email.cz> - patch to CMSSignedDataGenerator to allow it to work with PKCS11 providers.
+
Filipe Silva <filipe.silva@wedoconsulting.com> - patch to fix overead issue in BCPGInputStream.
+
Alpesh Parmar <alps@linuxmail.org> - patch for class cast problem in PGPPublicKey.getSignatures().
+
Jay Gengelbach <jgengelbach@webmethods.com> - patch to fix isSigningKey in PGPSecretKey class, patch to hashedPackets in PGP signatureGenerator, initial cut for indefinite length output.
+
Doug <doug@tigerprivacy.com> - public key ring patches for ElGamal Signatures, problem key ring data.
+
Matthew Mundy <mmundy1@umbc.edu> - infinite loop prevention patch to PKCS5S2ParametersGenerator.
+
Tom Cargill <cargill@profcon.com> - spelling patch in provider.
+
Breitenstrom Christian <C.Breitenstrom@t-systems.com> - compatibility patch to SignaturePacket, DetachedSignatureProcessor.
+
Zanotti Mirko <zanotti@cad.it> - patch to ordered equality test for X509Name.
+
Nicola Scendoni <nscendoni@babelps.it> - patch to add sorting to CertPath validation.
+
Ville Skyttä <ville.skytta@iki.fi> - patch to CRLDistPoint for cRLIssuer field. KeyStore compliance on add patches. DiffieHellman patch for provider compliance. Support for PEM object "TRUSTED CERTIFICATE". Exception handling patch in PEMReader. JavaDoc clean up.
+
Bruce Gordon <bruce.gordon@savvis.net> - patch to secret key creation encoding NullPointerException in OpenPGP, speed up for BCPGInputStream.
+
Miles Whiteley <Miles.Whiteley@savvis.net> - "223" fix for BCPGInputStream new packets.
+
Albert Moliner <amoliner@evintia.com> - initial TSP implementation.
+
Carlos Lozano <carlos@evintia.com> - initial TSP implementation, patch to SignerInformation for supporting repeated signers, initial updates for supporting repeated attributes in CMS.
+
Javier Delgadillo <javi@javi.codewarp.org> - initial Mozilla PublicKeyAndChallenge classes.
+
Joni Hahkala <joni.hahkala@cern.ch> - initial implementations of VOMS Attribute Certificate Validation, IetfAttrSyntax, and ObjectDigestInfo. We also wish to thank the EGEE project for making the work available.
+
Rolf Schillinger<rolf@sir-wum.de> - initial implementation of Attribute Certificate generation.
+
Sergey Bahtin <Sergey_Bahtin@yahoo.com> - fix for recovering certificate aliases in BKS and UBER key stores. Initial implementations of GOST-28147, GOST-3410, EC GOST-3410, GOST OFB mode (GOFB) and GOST-3411.
+
Franck Leroy <Franck.Leroy@keynectis.com> - ANS.1 set sorting. Contributions to TSP implementation. Test vectors for Bleichenbacher's forgery attack.
+
Atsuhiko Yamanaka <ymnk@jcraft.com> - patch for improving use of Montgomery numbers in BigInteger library. Patch to use size of private exponent in DH parameters.
+
Nickolay Bolshackov <tyrex@reksoft.ru> - patch for class cast exception in AuthorityInformationAccess class.
+
Soren Hilmer <soren.hilmer@tietoenator.com> - patches for CertID with issuerSerial set in TSP implementation, additional compliance testing.
+
Steve Mitchell <mitchell@intertrust.com> - patch for stateful path validator fix. Patch to allow BigInteger class to create negative numbers from byte arrays. Additions to allow different providers to be used for asymmetric/symmetric encryption in OpenPGP.
+Optimisation to avoid redundant verification in path validator. Suggestion to use PKIXParameters.getSigProvider() correctly.
+
Dirk Eisner <D.Eisner@seeburger.de> - initial implementation of ISO 78164-4 padding.
+
Julien Pasquier <julienpasquier@free.fr> - initial implementation of attribute classes from RFC 3126. Fix to KEKIdentifier, OtherKeyAttribute parsing. Initial ContentHints class.
+
Matteo <matartuso@libero.it> - sequence patch to ASN1Dump.
+
Andrew Paterson <andrew.paterson@burnsecs.com> - patches to PGP tools, isRevoked method on PGPPublicKey.
+
Vladimir Molotkov <vladimir.n.molotkov@intel.com> - extensive provider exception handling compliance testing.
+
Florin Kollan <adlocflo@web.de> - fix to ElGamalKeyParameters equality testing.
+
Pavel Vassiliev <paulvas@gmail.com> - Initial GOST28147Mac implementation.
+
Tom Pesman <tom@tnux.net> - addition of DES-EDE encryption for RSAPrivate keys to PEMWriter.
+
Lukasz Kowalczyk <lukasz.b.kowalczyk@gmail.com> - patch to fix parsing issue with OpenSSL PEM based certificate requests.
+
Arndt Hasch <Arndt.Hasch@maxence.de> - additional fix for partial reading with new style PGP packets.
+
Fix Bernd (KCDP 11) <bernd.fix@credit-suisse.com> - fix for 31 byte issue and exception throwing by Whirlpool.
+
David M. Lee <dmlee@Crossroads.com> - code for add and remove secret key in the PGPSecretKeyRing class. Additions to S/MIME and CMS unit tests.
+
Mike Dillon <md5@embody.org> - additional checks for PGP secret and public key construction, patches to copyWithNewPassword.
+
tu-vi cung <t2cung@hotmail.com> - patch for out of bounds problem in getDecoderStream method.
+
Chris Schultz <cschultz@gmail.com> - fix for InputStream constructor for X509V2AttributeCertificate.
+
David M. Lee <dmlee@Crossroads.com> - implementation assistance with streaming CMS classes.
+
Joel Rees <rees@ddcom.co.jp> - fix to correct getOID methods from returning same set on X.509 attribute certificates.
+
Francesc Sau <francesc.sau@partners.netfocus.es> - micro fix for tsp Accuracy class.
+
Larry Bugbee <bugbee@mac.com> - initial ECNR implementation.
+
Remi Blancher <Remi.Blancher@keynectis.com> - Contributions to TSP implementation. Initial implementation of RFC 3739 and ICAO ASN.1 classes.
+
Brian O'Rourke <brianorourke@gmail.com> - patch for signature creation time override in OpenPGP.
+
Andreas Schwier <andreas.schwier@cardcontact.de> - initial implementation of ISO9797 MAC Algorithm 3, addition of DES-EDE 64 MAC to the provider, fix to EC point encoding, addition of EC and RSA-PSS OIDs to CMS, addition of AES-CMAC and DESede-CMAC to JCE provider.
+
David Josse <david.josse@transacttools.net> - Patch for trailer function in version 2 signature packets.
+
Kishimoto Kazuhiko <kazu-k@hi-ho.ne.jp> - RFC 3280 updates to policy processing in the CertPath validator. Additional test data not covered by NIST.
+
Lawrence Tan <lwrnctan@gmail.com> - Large field OID sample test data. Missing key types in JDKKeyFactory.
+
Carlos Valiente <superdupont@gmail.com> - Addition of CRL writing to the PEMWriter class.
+
Keyon AG, Martin Christinat, https://www.keyon.ch - fixing incorrect
+ASN.1 encoding of field elements in X9FieldElement class.
+
Olaf Keller, <olaf.keller.bc@bluewin.ch> - initial implementation of the elliptic curves over binary fields F2m. Additional tests and modifications to elliptic curve support for both F2m and Fp. Performance improvements to F2m multiplication. Initial implementation of WNAF/WTNAF point multiplication. Improvement to k value generation in ECDSA.
+
Jörg Eichhorn <eichhorn@ponton-consulting.de> - patch to fix EOF read on SharedFileInputStream, support for F2m compression.
+
Karsten Ohme <widerstand@t-online.de> - initial check against for out of range data on non byte aligned RSA keys. Addition of equals/hashCode on ECCurve.Fp. Additional curve type support for Fp, contributions to F2m compression. F2m decoding for ECPointUtil. Infinity fix and prime192v2 fix for Fp. Extra validation for RSA key creation. Fix to name typos for some OpenSSL key generators. RFC-1779 table, improved RFC 2253 compliance for X509Name. Additional constructor validation for X.509/ESS ASN.1 classes. Validation for Printable, IA5, and Numeric Strings. Fix for RFC 5280 NameConstraint checking for RDNs.
+Support for surrogate pairs in DERUTF8String, DER UTF8 test. Additional X.509 name attributes for ISIS-MTT, RFC 3039, addition of indirect CRL support, initial X509 LDAP CertStore implementation, CertificatePair class, and X509CertificatePair class. Contributions to X509Store/Parser infrastructure and design.
+CertPath support for implicit DSA parameters and a range of NameConstraints. Addition of support for V1 attribute certificates and attribute certificate path validation. Initial classes for ASN.1 ISIS-MTT support. Enhancements for improving compliance with the NIST CertPath tests.
+
Carlos Lozano Ruiz <carlos@tradise.com> - patch for <ctrl><m> only handling in CRLFOutputStream.
+
John Alfred Prufrock <j.a.prufrock@gmail.com> - mods to GOST-3411 and MD2 to support ExtendedDigest.
+
Stefan Neusatz Guilhen <sneusatz@gmail.com> - initial version of RoleSyntax, improvements to AttributeCertificateHolder and AttributeCertificateIssuer.
+
Marzio Lo Giudice <marzio.logiudice@gmail.com> - fix to endianess in KDF2BytesGenerator, additional KDF2 tests.
+
Georg Lippold <georg.lippold@gmx.de> - initial implementation of NaccacheStern cipher.
+
Chris Viles <chris_viles@yahoo.com> - fix to SignatureSubpacket critical bit setting.
+
Pasi Eronen <Pasi.Eronen@nokia.com> - extra toString() support for ASN.1 library. Initial patch for large OID components.
+
Lijun Liao <https://github.com/xipki> performance enhancements for SHA family of digests. Bug report and patch for blank line handling in ArmoredInputStream. Addition of getSignatureAlgorithmID to BasicOCSPResp. Reset fix for SM2 signatures, performance improvements for SHA-3. Clean up of CMP EncryptedValueBuilder, additional functionality on PollReqContent. Bug fix for endianness issue in cSHAKE left encode method. Initial implementation of SipHash128. Initial code for RFC 8702 compliance. Additional settings for ECIES with SHA-2. Support for SHAKE lookup in PSS/ECDSA and SM3 in CMS. Correction to SHA-256 OIDs for XMSS^MT. Initial implementation of XDH IES.
+
Maria Ivanova <maria.ivanova@gmail.com> - support for tags > 30 in ASN.1 parsing.
+
Armin Häberling <arminha@student.ethz.ch> - first cut of internationalisation, initial PKIX validation classes.
+
Marius Schilder <mschilder@google.com> - main set of test vectors for Bleichenbacher's forgery attack.
+
Xavier Le Vourch <xavier@brittanysoftware.com> - general code clean ups.
+
Erik Tews <e_tews@cdc.informatik.tu-darmstadt.de> - initial threaded random seed generator, constant-time PKCS#1.5 decoding
+
Thomas Dixon <reikomusha@gmail.com> - initial implementations of TEA/XTEA, Salsa20, ISAAC, and Noekeon. XTEA enhancements.
+
Frank Cornelis <info@frankcornelis.be>- addition of crlAccessMethod in X509ObjectIdentifiers.
+
Rui Joaquim <rjoaquim@cc.isel.ipl.pt> - initial implementation of RSA blinding for signatures.
+
David Stacey <DStacey@allantgroup.com> - addition of trust packet checking on revocation signatures in PGPSecretKeyRing.
+
Martijn Brinkers <list@mitm.nl> - better exception handling in CMS enveloping, "just in time" modifications for CRL and Sequence evaluation.
+
Julius Davies <juliusdavies@gmail.com> - additional modes and algorithm support in PEMReader
+
Matthias <g@rtner.de> - GnuPG compatibility changes for PBEFileProcessor.
+
Olga Käthler <olga.kaethler@hjp-consulting.com> - initial implementation of TeleTrusT EC curves, additional ISO 9797 MACs, contributions to EAC OIDs, addition of EAC algorithms to CMS Signing.
+
Germano Rizzo <germano.rizzo@gmail.com> - initial implementation of CMac, EAX, HC-128, and HC-256, optimisations for Salsa20.
+
Núria Marí <numaa@hotmail.com> - patch for alternate data type recoginition in CMSSignedDataParser.
+
Janis Schuller <js@tzi.de> - addition of NotationData packets for OpenPGP.
+
Michael Samblanet <mike@samblanet.com> - patches towards improved Sun/default provider support in CMS.
+
Mike StJohns <mstjohns@comcast.net> - patches for supporting empty subject in X.509 certificate generation, noneWithECDSA, updates to KeyPurposeId.
+
Ramon Keller <ramon.keller@gmx.ch> - patch to deal with null revocations return from other CRL in X509V2CRLGenerator.
+
Mark Nelson <mark@nbr.com> - correction to excluded DN in name constraints processing for PKIX processing.
+
Eugene Golushkov <eugene_gff@ukr.net> - mask fix to single byte read in TlsInputStream.
+
Julien Pasquier <julienpasquier@free.fr> - additional classes for supporting signature policy and signer certificates in the ASN.1 esf and ess libraries.
+
Peter Knopp <pknopp@mtg.de> - fix for named curve recognition in ECGOST key generation.
+
Jakub Gwozdz <gwozdziu@rpg.pl> - addition of getTsa() to TimeStampTokenInfo.
Tal Yacobi <tal.yacobi@octavian-tech.com> - fix for issue in OpenPGP examples [#BJA-55].
+
Massimiliano Ziccardi <massimiliano.ziccardi@gmail.comt> - support for counter signature reading in CMS API, update for multiple counter signature attributes, JCA compliance patch for PEM parsing in CertificateFactory.
J Ross Nicoll <jrn@jrn.me.uk> - improved exception handling for getInstance() in ASN.1 library.
+
Matthew Stevenson <mavricknz@yahoo.com> - patch to construtor for CRMF CertSequence.
+
Gabriele Contini <gcontini@hotpop.com> - identified a bug in ASN.1 library with handling of unterminated NDEF's.
+
Roelof Naude <roelof.naude@epiuse.com> - patch for TLS client to send empty client certs in response to HP_CERTIFICATE_REQUEST.
+
Patrick Peck <peck@signaturen.at> - identified problem with DERApplicationSpecific and high tag numbers in ASN.1 library.
+
Michael LeMay <lemaymd@lemaymd.com> - identified problem with EAX [#BJA-93].
+
Alex Dupre <ale@FreeBSD.org> - fix to use of Signature rather than SignatureSpi in provider [#BJA-90]. Addition of null provider use to SignedPublicKeyAndChallenge and PKCS10CertificationRequest [#BJA-102]
+
Michael Schoene <michael@sigrid-und-michael.de> - fix of improper handling of null in ExtendedPKIXParameters.setTrustedACIssuers(), check for V2 signingCertificate attribute in TimeStampResponse.validate().
+
Ion Larrañaga <ilarra@s21sec.com> fix to default partial packet generation in BCPGOutputStream.
+
Bob Kerns <bob.kerns@positscience.com> fix to hashCode for X509CertificateObject.
+
Stefan Meyer <stefan.meyer@ewe.de> backport for PKIXCertPathValidotor and SMIMESignedMailReviewer.
+
Robert J. Moore <Robert.J.Moore@allanbank.com> speedups for OpenPGPCFB mode, clean room JCE patches.
+
Rui Hodai <rui@po.ntts.co.jp> speed ups for Camellia implementation, CamelliaLightEngine.
+
Emir Bucalovic <emir.bucalovic@mail.com> initial implementation of Grain-v1 and Grain-128.
+
Torbjorn Svensson <tobbe79@gmail.com> initial implementation of Grain-v1 and Grain-128.
+
Paul FitzPatrick <bouncycastle_pfitz@fitzpatrick.cc> error message fix to X509LDAPCertStoreSpi, comparison fix to BCStrictStyle.
+
Henrik Andersson <k.henrik.andersson@gmail.com> addition of UniqueIssuerID to certificate generation.
+
Cagdas Cirit <cagdascirit@gmail.com> subjectAlternativeName fix for x509CertStoreSelector.
+
Harakiri <harakiri_23@yahoo.com> datahandler patch for attached parts in SMIME signatures.
+
Pedro Henriques <pmahenriques@gmail.com> explicit bounds checking for DESKeyGenerator, code simplification for OAEPEncoding.
+
Lothar Kimmeringer <job@kimmeringer.de> verbose mode for ASN1Dump, support for DERExternal, DNS performance fix for S/MIME API, corrections for DLExternal and testing. Identified an issue with Properties utils ignoring system properties in some cases.
+
Richard Farr <rfarr.se@gmail.com> initial SRP-6a implementation.
+
Thomas Castiglione <castiglione@au.ibm.com> patch to encoding for CRMF OptionalValidity.
+
Elisabetta Romani <eromani@sogei.it> patch for recognising multiple counter signatures.
+
Robin Lundgren <r737lundgren@gmail.com> CMPCertificate constructor from X509CertificateStructure fix.
+
Petr Kadlec <mormegil@centrum.cz> fix to sign extension key and IV problem in HC-128, HC-256.
+
Andreas Antener <antener_a@gmx.ch> fix to buffer reset in AsymmetricBufferedBlockCipher.
+
Harendra Rawat <hsrawat@yahoo.com> fix for BERConstructedOctetString.
+
Rolf Lindemann <lindemann@trustcenter.de> patch for PKCS12 key store to support more flexible attribute specifications [#BMA-42].
+
Alex Artamonov <alexart.home@gmail.com> name look up patch for GOST-2001 parameters.
+
Mike Lyons <mlyons@layer7tech.com> work arounds for EC JDK bug 6738532 and JSSE EC naming conventions.
+
Chris Cole <chris_h_cole@yahoo.com> identified a problem handling null passwords when loading a BKS keystore.
+
Tomas Krivanek <tom@atack.cz> added checking of Sender header to SignedMailValidator.
+
Michael <emfau@t-online.de> correction of field error in getResponse method in CertRepMessage.
+
Trevor Perrin <trevor@cryptography.com> addition of constant time equals to avoid possible timing attacks.
+
Markus Kilås <markus@primekey.se> several enhancements to TimeStampResponseGenerator.
+
Dario Novakovic <darionis@yahoo.com> fix for NPE when checking revocation reason on CRL without extensions.
+
Michael Smith <msmith@cbnco.com> bug fixes and enhancements to the CMP and CRMF classes, initial Master List classes.
+
Andrea Zilio <andrea.zilio@gmail.com> fix for PEM password encryption of private keys.
+
Alex Birkett <alex@birkett.co.uk> added support for EC cipher suites in TLS client (RFC 4492) [#BJA-291].
+
Wayne Grant <waynedgrant@gmail.com> additional OIDs for PCKS10 and certificate generation support.
+
Frank Cornelis <info@frankcornelis.be> additional support classes for CAdES, enhancements to OCSP classes.
+
Jan Dittberner <jan@dittberner.info> addHeader patch for SMIME generator.
+
Bob McGowan <boab.mcgoo@btinternet.com> patch to support different object and mgf digests in PSS signing.
+
Ivo Matheis <i.matheis@seeburger.de> fix to padding verification in ISO-9796-1.
+
Marco Sandrini <nessche@gmail.com> patch to add IV to ISO9797Alg3Mac.
+
Alf Malf <alfilmalf@hotmail.com> removal of unnecessary limit in CMSContentInfoParser.
+
Alfonso Massa <alfonso.massa@insiel.it> contributions to CMS time stamp classes.
+
Giacomo Boccardo <gboccardo@unimaticaspa.it> initial work on CMSTimeStampedDataParser.
+
Arnis Tartu <arnis@ut.ee> patches for dealing with OIDs with specific key sizes associated in CMS.
+
Janusz Sikociński <J.Sikocinski@gdzie.pl> addition of Features subpacket support to OpenPGP API.
+
Juri Hudolejev <jhudolejev@gmail.com> JavaDoc fix to CMSSignedDataParser.
+
Liane Velten <liane.velten@hjp-consulting.com> fine tuning of code for DHParameters validation.
+
Shawn Willden <swillden@google.com> additional functionality to PGPKeyRing.
+
Atanas Krachev <akrachev@gmail.com> added support for revocation signatures in OpenPGP.
+
Mickael Laiking <mickael.laiking@keynectis.com> initial cut of EAC classes.
+
Tim Buktu <tbuktu@hotmail.com> Initial implementation of NTRU signing and encryption.
+
Bernd <rbernd@gmail.com> Fix for open of PGP literal data stream with UTF-8 naming.
+
Steing Inge Morisbak <stein.inge.morisbak@BEKK.no> Test code for lower case Hex data in PEM headers.
+
Andreas Schmid <andreas.schmid@tngtech.com> Additional expiry time check in PGPPublicKeys.
+
Phil Steitz <phil.steitz@gmail.com> Final patch eliminating JCE dependencies in the OpenPGP BC classes.
+
Ignat Korchagin <ignat.korchagin@gmail.com> Initial implementation of DSTU-4145-2002, long hash fix for DSTU-4145-2002.
+
Petar Petrov <p.petrov@bers-soft.com> Testing and debugging of UTF-8 OpenPGP passwords.
+
Daniel Fitzpatrick <daniel.f.nwr@gmail.com> Initial implementation of ephemeral key support for IES, initial implementions of RSA-KEM and ECIES-KEM, initial implementation of homogeneous projective coordinates for EC.
+
Andy Neilson <Andy.Neilson@quest.com>a further patches to deal with multiple providers and PEMReader.
+
Ted Shaw <xiao.xj@gmail.com> patch to MiscPEMGenerator for handling new PKCS10CeriticationRequests.
+
Eleriseth <Eleriseth@WPECGLtYbVi8Rl6Y7Vzl2Lvd2EUVW99v3yNV3IWROG8.fms> speed up for SIC/CTR mode. Provider compatibilty generalisations for EC operations.
+
Kenny Root <kenny@the-b.org> patch for issuerAltName, subjectAltName support in X509CertificateObject, BaseBlockCipher.getIV() patch for AEAD.
+
Maarten Bodewes <maarten.bodewes@gmail.com> initial implementation of HKDF and NIST SP 800-108 MAC based KDF functions.
+
Philip Clay <pilf_b@gyahoo.com> Initial implementation of J-PAKE.
+
Brian Carlstrom <bdc@carlstrom.com> compliance patches for some JCA/JCE keystore and cipher classes, miscellaneous code quality improvements, intial provider PBKDF2WithHmacSHA1 SecretKeyFactory.
+
Samuel Lidén Borell <samuel@primekey.se> patch to add DSTU-4145 to DefaultSignatureAlgorithmFinder
+
Sergio Demian Lerner <sergiolerner@certimix.com> pointing out isInfinity issue in ECDSASigner signature verification.
+
Tim Whittington <Tim.Whittington@orionhealth.com> patch to remove extra init call in CMac, additional of Memoable interface for Digest classes, initial implementation of GMAC, further correctness tests for IV and reset processing in OCB, CCM, and block cipher reset. Initial implementation of Skein, XSalsa20, ChaCha, reduced round Salsa20, Threefish, and the Poly1305 MAC. Documentation updates. Added OCB support to Noekeon and CAST6 in the provider, exception testing for CTS, optimisations for CCM, provider support for AAD cipher methods, safe CipherInput/OutputStream implementations for use with AAD and subsequent bug fixes, cleanup after IDEA patent expiry, work on JCE SipHash support, optimisations for AESFastEngine, further work on EncodableDigest for SHA-2 digests, contributions to BCrypt/OpenBSDBCrypt, PGP API documentation and code quality work.
+
Marcus Lundblad <marcus.lundblad@primekey.se> patch for working arnound JDK jarsigner TSP bug, optional setting of IssuerSerial in TimeStampTokenGenerator, additional extensions enhancement for time stamp token generation.
+
Andrey Zhozhin <zhozhin@xrm.ru> patch for override of TSP SignerInfo attributes.
+
Sergey Tiunov <t5555d@gmail.com> initial cut of DVCS classes.
+
Damian Kolasa <fatfredyy@gmail.com> ASN1Sequence patch for class cast issue in X9Curve.
+
Ash Hughes <ashley.hughes@blueyonder.co.uk> patches for supporting PGPSecretKeyRing/PGPSecretKeys encodings with empty private keys, initial code for PGPSignatureSubpacketVector.getEmbeddedSignatures().
+
Daniel Hirscher <dev@daniel-hirscher.de> patch to support parsing of explicit EC parameters in PEM files.
+
Daniele Ricci <daniele.athome@gmail.com> initial implementation of EC keys for OpenpPGP and RFC6637 support.
+
Matti Aarnio <matti.aarnio@methics.fi> tweaks to any build to remove dependence on shell scripts. Initial SM3 digest implementation, some EC related code cleanups, JavaDoc improvements for ASN.1 classes, addition of NONEwithRSA to lightweight RSADigestSigner.
+
Babak Najafi <bnajafi@akamai.com> fixes to OpenPGP NotationData to prevent truncation problems.
+
Eric Müller <eric.mueller@sage.de> additional standard algorithm name lookups in JcaPEMKeyConverter.
+
Mathias Herberts <Mathias.Herberts@gmail.com> fix to inOff usage in RFC3394WrapEngine.
+
Daniil Ivanov <daniil.ivanov@gmail.com> addition of provider support for GOST HMAC SecretKeyFactory.
+
Daniele Grasso <daniele.grasso86@gmail.com> contributions to final Key calculation code for SRP6.
+
Andrey Utkin <cindrhc@gmail.com> patch to reconstruction of ECGOST keys from PrivateKeyInfo objects in provider classes.
+
Arnis Tartu <arnis@ut.ee> checker for generated key vs OID in JceCMSContentEncryptorBuilder.
+
AxelVDB <axel-vdb@riseup.net> initial implementation of Shacal2.
+
Roberto Tyley <> further work on completing gradle build.
+
Waldemar Dick <wdick@devmue.de> code improvement in x500 ASN.1 package.
+
Sid Steward <sid.steward@pdflabs.com> code improvements to ASN1Boolean.
+
Alex Klyubin <klyubin@google.com> AlgorithmParameters check for EC key agreement.
+
Jonathan Gillett <gsoc.student@gmail.com> Initial support for block cipher IVs in IESEngine, IES MAC length check bug fix.
+
Andreas Reiter <andreas.reiter@iaik.tugraz.at> Reported incomplete status of CertificateVerify processing in (D)TLS server, and provided fix.
+
Kieran Miller <kieran.miller@gmail.com> initial implementation for RFC 5649 key wrap with padding.
+
Oliver Ehli<ehli@arago.de> Additional support for BSI plain ECDSA in the provider.
+
Daniel Heldt<Daniel.Heldt@cryptovision.com> Initial support for encodable state message digests
+
Robert Bushman <bouncycastle@traxel.com> Clean up of DirectKeySignature example.
+
Maurice Aarts<aarts@riscure.com> updated to KDF generator to follow NIST SP 800-108.
+
Franziskus Kiefer<https://github.com/franziskuskiefer> initial implementation of Cramer-Shoup.
+
KB Sriram<mail_kb@yahoo.com> testing for odd encodings for PGP User Attribute Subpackets.
+
Marco Schulze<marco@nightlabs.de> Reported verification bug in GenericSigner.
+
Martin Schaef<https://github.com/martinschaef> contributed a code-cleanup patch.
Tobias Wich<tobias.wich@ecsec.de> Provided patch for TLS to work around servers sending Supported Elliptic Curves extension unexpectedly.
+
Hauke Mehrtens<hauke@hauke-m.de> TLS patch to add ECDHE_ECDSA CCM ciphersuites from RFC 7251.
+
Daniel Zimmerman<dmz@galois.com> Further key quality improvements to RSAKeyPairGenerator.
+
Jens Kapitza<j.kapitza@schwarze-allianz.de> Iterable support in OpenPGP API, code cleanup in OpenPGP API.
+
Johan Eklund<johan@primekey.se> update to RFC 6960 for OCSPObjectIdentifiers.
+
nikosn<https://github.com/nikosn> Fix to encoding of EC private keys to ensure encoding matches order length.
+
Axel von dem Bruch <axel-vdb@riseup.net> Contributions to BCrypt/OpenBSDBCrypt, original version of Blake2bDigest.
+
Derek Atkins <derek@ihtfp.com> Documentation fixes to X9ObjectIdentifiers.
+
Peter Jr Halicky <peto@halicky.sk> Correction to notification/error message handling in SignedMailValidator.
+
lartiguePierre<https://github.com/lartiguePierre> Fix for counter signature SID in CMSSignedData.
+
Thomas Belot<thomas.belot+BC@gmail.com> initial CertPathLoopTest for demonstrating stack overflow issue.
+
Rich DiCroce<https://github.com/rdicroce> Initial implementation of server-side TLS-SRP support. TLS API extension to support non-blocking usage. Support for TLS RAW public keys.
+
Björn Kautler<https://github.com/Vampire> Refinements to cert path validation (authority key addition, certificate order preservation).
+
Dominik Schürmann<https://github.com/dschuermann> method for returning signatures/verifications without user IDs on PGPPublicKey, method for exposing S2K in PGPSecretKey, constants for GNU protection modes in S2K classes, optional version header for armored output.
+
Michael <MSKnete@web.de> initial fix for bitStrength issue for OpenPGP EC keys, correction for generic type on RecipientInformationStore.
+
Tobias Wagner <tobias.wagner@n-design.de> Fix SecureRandom handling in BcAsymmetricKeyWrapper [#BJA-536].
+
Sergio Giro <sgiro@google.com> Fixed adding of additional stores from CRL distribution point [#BJA-537]. Fixed missing null check for CRL certificate issuer [#BJA-538], removal of risky zeroisation code in PBE.java, check for salt in PBEKeys that require it.
+
bschuette<https://github.com/bschuette> Fixed typo in DefaultSignatureAlgorithmIdentifierFinder, additional methods on CMSSignedDataParser.
+
Leonard Dallot<https://github.com/dallotTazTag> Fix to S2K usage of none on changing passwords on keys without passwords originally.
+
Jan Willem Janssen <j.w.janssen+bouncycastle@lxtreme.nl> Support for DSAParameters in lightweight SubjectPublicKeyInfoFactory, initial object signer verifier for BC lightweight EC.
+
Sebastian Oerding <sebastian.oerding@robotron.de> Fixes to toString() in x509.CertificatePolicies.
+
Kai Kramer <kai.kramer@gmail.com> Code to deal with orphaned chain certificates in the PKCS#12 KeyStore.
+
Benoit Charles <benoit.charles@opentrust.com> Fix for IES data length check on decryption.
+
Niko <nfink95@gmail.com> fix to cast issue in getOutputSize() for ECIES.
+
akwizgran<https://github.com/akwizgran> Fixed clone of key in Blake2bDgest copy constructor, blake2b reset issue for varient keys.
+
Matthias Edelhoff <Matthias.Edelhoff@cryptovision.com> BasicConstraintsValidation pathlen fix in PKIX certpath classes.
+
Lukasz Deputat <lukasz.deputat@gmail.com> Fixed bugs in TlsUtils read methods [#BJA-592].
+
Justin Ludwig <https://github.com/justinludwig> Iterator fix for PGPObjectFactory to handle stream packets at start of iterated data.
+
André Berenguel <https://github.com/aberenguel> Fix to include ECNamedCurveSpec in EC AlgorithmParameterSpi
+
Slawomir Jaranowski<https://github.com/slawekjaranowski> Patch to make cipher/hash/signature name methods in PGP internal API public.
+
Andrey Vasilyev<https://github.com/andrey-vasilyev> Initial implementation of GOST R 34.11-2012.
+
William Glanton <wglanton77@gmail.com> Fixed bug in Poly1305 [#BJA-620].
+
jdvorak001<https://github.com/jdvorak001> Speed improvements for ASN.1 ObjectIdentifier cache.
+
Joseph Naegele <jnaegele@grierforensics.com> Patch for handling multiple certificates in a DANE SMIMEA entry.
+
Andrew Bonventre<https://github.com/andybons> NullPointer patch for WNafUtil.
+
The Google Security Team (Project Wycheproof) <https://github.com/google/wycheproof> defect analysis and additional test cases for the provider.
+
Gorka Irazoqui <girazoki@wpi.edu> from Intel Security Center of Excellence <https://security-center.intel.com/> detection of the issue with AESFastEngine (CVE-2016-1000339), additional suggestions for improvement to hardening of AESEngine and finding cache sensitivities in EC key generation/signing.
+
Joerg Senekowitsch <joerg.senekowitsch@veridos.com> patch to deal with hard coded boolean in EAC ECDSAPublicKey.
+
Alexandr Krivoshta <wipe@ya.ru> N4 calculation fix to GOFB mode.
+
Artem Storozhuk <storojs72@gmail.com> N4 calculation fix to GOFB mode.
+
Na Yu <na.yu@samsung.com> Constructor patches to CMC PKIData.
+
Evangelos Karatsiolis <ekaratsiolis@mtg.de> Corrected use of explicit tagging in X.509 PolicyConstraints class.
+
VivleSoren <https://github.com/VivleSoren> additional constructor for McElieceCCA2PrivateKeyParameters.
+
mtausig <https://github.com/mtausig> JavaDoc fix for MCSEncryptedDataGenerator.
+
Anders Schack-Mulligen <https://github.com/aschackmull> code cleanups for CMSSignedDataParser, BrokenKDF2BytesGenerator.
+
Sebastian Wolfgang Roland <sebastianwolfgang.roland@stud.tu-darmstadt.de> Initial XMSS/XMSS-MT implementation.
+
didisoft <https://github.com/didisoft> test code for PGP signature removal involving user ids.
+
Mike Safonov<https://github.com/MikeSafonov> initial implementation of GOST3410-2012 for light weight provider and JCA, parameters patches for ECGOST keys, initial implementation of GOST3412-2015, addition of fromExtensions() for CRLDistPoint.
+
Artem Storozhuk <storojs72@gmail.com> initial implementation of DSTU7564 (digest) and DSTU7624 (cipher) and their associated modes.
+
Andreas Glaser <andreas.glaser@gi-de.com> patch to recognise ANSSI curves for PKCS#10 requests.
+
codeborne <https://github.com/cbxp> patch to correct OIDs used in public key digest parameters for ECGOST-2012.
+
FauxFaux <https://github.com/FauxFaux> patch for JDK 1.9 update to DRBG.java.
+
4garbage <https://github.com/4garbage> patch to allow GOST3410-94 private keys encoded as integers.
+
ekszz <https://github.com/ekszz> corrections to SM2 signer to include default identity value.
+
jminer <https://github.com/jminer> fix to Blake2b for hashes in range of 2**64-127 to 2**64.
+
str4d <https://github.com/str4d> initial implementation of Blake2s
+
Scott Woodward <scott@bit3consulting.com> performance fixes for CTRSP800DRBG.
+
David Strawn <https://github.com/isomarcte> fix for off by one error in SCRYPT bounds checking.
+
chris mccown <0xchrismccown@gmail.com> identification of serialisation issue with XMSS/XMSSMT private keys (see also CVE-2018-1000613).
+
ZZMarquis <https://github.com/ZZMarquis> offset patches for SM2 encryption and decryption, improvement to Array constant time comparison.
+
Andreas Kretschmer, Siemens AG <https://github.com/Akretsch> NPE fix for CertTemplate.getVersion(), ASN.1 KEM Support classes for CMP.
+
Armin Lunkeit, Michael Tautenhahn <> identification of M-R test issue on higher certainty values in RSA key pair generation.
+
Vincent Breitmoser <https://github.com/Valodim> fix to ignore unnecessary checksum calculator on PGP secret key encryption.
+
Adam Vartanian <https://github.com/flooey> use of ShortBuffer exception and buffer size pre-check in Cipher.doFinal().
+
Bernd <https://github.com/ecki> Fix to make PGPUtil.pipeFileContents use buffer and not leak file handle.
+
Shartung <https://github.com/shartung> Additional EC Key Agreement algorithms in support of German BSI TR-03111.
+
Paul Schaub <https://github.com/vanitasvitae> bringing PGPSecretKey.getUserIds() into line with PGPPublicKey.getUserIds(). Exception message fix in BcPublicKeyDataDecryptorFactory. Additional tests on PGP key ring generation. Improved functionality of PGPSignatureSubpacketGenerator, PGPPublicKeyRing. Tweaks to PGPDataEncryptorBuilder interface, fix for JcaPGP/BcPGP Ed25519 private key conversion. Added configurable CRC detection to ArmoredInputStream, additional control character skipping in ArmoredInputStream. Rewind code for PGPPBEEncryptedData, addition of PGPSignature.getDigestPrefix(). Wrong list traversal fix in PGPSecretKeyRing. Further improvement to use of generics in PGP API. General interop improvements. PGP Public / Secure keyring ignore marker packets when reading. Initial work on PGP session key handling, filtering literal data for canoncialization. Addition of direct key identified key-ring construction. PGPSecretKeyRing.insertOrReplacePublicKey addition. Addition of utility methods for joining/merging signatures and public keys. Addition of PGP regexp packet, PolicyURI packet handling, UTF8 comment testing. Efficiency improvements to TruncatedStream. Initial Argon2 support for OpenPGP. General cleanups. Fast CRC24 implementation, SHA3 addtions to BcImplProvider, improvements to One Pass Signature support, signatue validation, read() consistency in BCPGInputStream. Contributions to AEAD support (v6 & v5) in PGP API. Addition of PGP WildCard ID, moving the PGP example code into the 21st century. Security patches for encrypted data generation, initial thread safe certification verification. Support for V6 EC keys, V6 signatures, V6 encryption, V6 PKESK, PGP packet criticality, and Preferred AEAD CipherSuites sigsubpacket support. Introduce high-level OpenPGP API for message creation/consumption and certificate evaluation
+
Nick of Nexxar <https://github.com/nros> update to OpenPGP package to handle a broader range of EC curves.
+
catbref <https://github.com/catbref> sample implementation of RFC 7748/Ed25519 (incorporated work from github users Valodim and str4d as well).
+
gerlion <https://github.com/gerlion> detection of concurrency issue with pre-1.60 EC math library.
+
fgrieu <fgrieu@gmail.com> identification and suggested fixes for possible timing vulnerability in OAEPEncoding and RSACoreEngine.
+
MTG <https://github.com/mtgag> patch for decoding issues in PKIPublicationInfo and CertifiedKeyPair, patch for adding jurisdiction{C,ST,L} to X500 name style.
+
Andreas Gadermaier <up.gadermaier@gmail.com> initial version of Argon2 PBKDF algorithm.
+
Tony Washer <https://github.com/tonywasher> ECIESKeyEncapsulation fix for use of OldCofactor mode. Submitted ChaCha20Poly1305 prototype. Remove support for maxXofLen in Kangaroo. Police Blake3 output limit. Add LEAEngine. Review of qTesla, Java 1.9 module code, additional test code and debugging for GOST, DSTU, and ECNR algorithms. Initial lightweight implementation of the ZUC ciphers and macs. Additions to LMS/HSS API implementations, fix for truncation issue with big HSS keys, contributions to optimization of LMS/HSS. Patch for XDH/EdDSA key handling and mcEliece decryption using kobaraImai. Initial GCM-SIV, Blake3, and Kangaroo implementation. Corrections to length outputs for getUpdateOutputSize()/doFinal() in ISAP, PhotonBeetle, and Xoodyak. Fix GCFB reset. Fix Elephant multi-part process. Fix AsconXof support multi-part outputs.
+
Vincent Bouckaert <https://github.com/veebee> initial version of RFC 4998 ASN.1 classes. Debugging and testing of high level RFC 4998 implementation.
+
Aurimas Liutikas <https://github.com/liutikas> JavaDoc patches to ReasonsMask.
+
Gabriel Sroka <https://github.com/gabrielsroka> corrected comments in RSA validation.
+
sarah-mdv <https://github.com/sarah-mdv> improvements to JceKeyTransRecipientInfoGenerator, tests for JournalingSecureRandom, initial implementation of JournaledAlgorithm.
+
Jesse Feinman <https://github.com/jessefeinman> performance optimisation in RSAKeyParameters.
+
Gilis95 <https://github.com/Gilis95> improved JSSE compatibility for setEnabledCipherSuites.
Daniel Heldt<https://github.com/dheldt> Fixing encodings in unicode tests to allow a wider range of Java compilers to work. Tweak to inheritance in JceKeyAgreeRecipient.
+
Ugochukwu Mmaduekwe<https://github.com/Xor-el> Fix for initially bugged legacy Integers.numberOfLeadingZeros method.
+
Gsealy <https://github.com/Gsealy> addition of PBKDF2withHmacSM3 and HmacSM3 to the provider.
+
aphuang2013 <https://github.com/aphuang2013> update to path validation in EST service for ClearPath EST.
+
Kevin Herron <https://github.com/kevinherron> Initial ChaCha20Poly1305 prototype.
+
vkreml <https://github.com/svkreml> GOST compliance change for DefaultCMSSignatureEncryptionAlgorithmFinder.
+
Tobias Ospelt <tobias@pentagrid.ch> Identification of 1.63 regression in ASN.1 parsing.
+
Phil Glass <https://github.com/PhilGlass> Patch for to allow BC to function on Android 10.
+
Steven <https://github.com/acid1103> Identified issue with ChaCha20Poly1305 and large files. Identified an overly-eager null check in ChaCha20Poly1305.
+
Anatoly Zaretsky <https://github.com/azaretsky> Daemon mode patch for entropy gatherer thread.
+
Brandon Weeks <https://github.com/brandonweeks> Fix for engineInitSign() with null random values in PSSSignatureSpi. Further Error Prone static analysis. Off by one error fix in ECIES engineGetOutputSize().
+
Stojan Dimitrovski <https://github.com/hf> SecureRandom configuration code for NTRU key generation.
+
vvvlado <https://github.com/vvvlado> Fix to support repeated headers in PGP armored data.
+
a--v--k <https://github.com/a--v--k> Clean up for some invalid mappings in the Java provider.
+
lipnitsk <https://github.com/lipnitsk> Fix for non-CRT RSA Private serialisation.
+
Niccolò Fontana <https://github.com/NicFontana> Initial fix for high-latency DTLS HelloVerifyRequest handshakes.
+
sudheernv <https://github.com/sudheernv> Patch for KMAC rightEncode() encoding.
+
Mathias Neuhaus <https://github.com/mneuhaus-cv> Patch for cSHAKE extra padding on block aligned N and S bug.
+
Yuri Schimke <https://github.com/yschimke> Patch for nested exception handling in BcKeyStoreSpi.
+
Jaime Hablutzel <hablutzel1@gmail.com> Typo fixes in properties for CertPathReviewer/SignedMailValidator.
+
macknight <https://github.com/macknight> Fix to usage string in ClearSignedFileProcessor example.
+
Hugo Visser <https://github.com/hvisser> Patch for BigInteger.intValueExact() compatibility issue.
+
Adam Cao <https://github.com/AdamXiaotCao> thread safety patch to X500Name.hashCode()
+
Artem Smotrakov<https://github.com/artem-smotrakov> general code clean ups and some additional sanity checks.
+
Irina <https://github.com/alek-sun> Upgrade of OpenSSL PBKDF to use UTF8.
+
John Stell <https://github.com/BlackthornYugen> Additional test code for EC point multiply.
+
Susmit Sarkar <https://github.com/Susmit07> Addition of SHA-224 support to PGP clear signed data.
+
Simon Greatrix <https://github.com/simon-greatrix> RFC5649WrapEngine zero length fix.
+
Matti Varanka and Tero Rontti from the Synopsys Cybersecurity Research Center; discovery and notification of CVE-2020-28052.
+
Jan S. <https://github.com/jpstotz> Extensions to PEMParser to allow for inheritance and adding specialised PEM object parsing.
+
dipakbag <https://github.com/dipakbag> Fix to ESTService Content-Type header check.
+
pelzvieh <https://github.com/pelzvieh> fix for CRLs with absent next update in PKIXCRLUtil.
+
Matthias Valvekens <matthias.valvekens@itextpdf.com> new implementation and additional testing for BasicConstraints task in validations package.
+
Bart Bakker <https://github.com/bjpbakker> RFC 5280 boundaries checks for CRLReason and CRLNumber. Addition of binary-signing-time CMS attribute.
+
Matthias Neugschwandtner and Gergo Barany from Oracle Labs; SICBlockCipher performance optimisation.
+
Rebecca Searls <https://github.com/rsearls> Initial migration of bcmail to the jakarta APIs.
+
Amann Malik <https://github.com/amannm> Initial implementation of private tags in ASN.1 library
+
Ties de Kock <https://github.com/ties> Extract dedicated functions out of SignerInformation.doVerify
+
matheus-eyng <https://github.com/matheus-eyng> Initial light weight patch for shake-len object identifiers.
+
Le Karasique <https://github.com/Karasiq> Identification of non-performant unnecessary code in KeccakDigest.java.
+
Matti Bickel <https://github.com/wundrian> canRead test fix for JcaPKIXIdentityBuilder.
+
wodzu-dudis <https://github.com/wodzu-dudis> 1.5 compatibility fix for ProvX509KeyManagerSimple$Match.
+
John Jiang <johnsjiang@tencent.com> improvements to input validation in SM2Engine class. Identification of SM2 signer private key out of range issue.
+
mgrafl <https://github.com/mgrafl> - JavaDoc fix for NISTObjectIdentifiers class.
+
iiordanov <https://github.com/iiordanov> DH and ECDH anon cipher support for TLS.
+
yf-zs <https://github.com/yf-zs> - Fix for CRL DP extension handling in CertPathValidatorUtilities.
+
Dr. Harbich <https://github.com/raubv0gel> - Testing and debugging of high level implementation of RFC 4998. Addition of Blake2, Blake3 OIDS.
+
Francesco Gini <https://github.com/francesco-gini-privitar> - RadixConverter speed up for SP 800-38G FPE.
+
Alexander Falb <https://github.com/elexx> - additional JavaDoc in X509Extensions class.
+
Jonathan W. Cranford <https://github.com/jwcranford> - added capability to show incremental progress and suppress out of scope tests in build scripts.
+
Brady Siegel <https://github.com/bmsiegel> - PKCS10CertificationRequest OID comparison fix.
+
Andreas Kuehne <https://github.com/kuehne-trustable-de> - addition of regInfo to CRMF request message builder.
+
Fethbita <https://github.com/Fethbita> - added len range check on ConcatenationKDFGenerator (SP 800-56C compliance).
+
Amazon AWS Security Team - isolation and identification of performance bottlenecks in the BC PEM parsing support.
+
Phillip Schichtel <https://github.com/pschichtel> - initial code for specifying wrapping algorithm with PGP PBE encryption method, forcing of session key usage.
+
Alexander Dippel <https://github.com/adippel> - corrections to prevent NPEs on chunked encoding of EST responses.
+
Johann N. Löfflmann <https://github.com/jonelo> - fix to "too small" buffer issue in Blake2sp.
+
Scott Xu <https://github.com/scott-xu> - message fix in OpenSSHPublicKeyUtil
+
Scott Arciszewski <https://github/scottarc> - correction to ant scripts to ensure UTF8 support.
+
GitHub Security team - identification of the X509LDAPCertStoreSpi wildcard bug (see CVE-2023-33201).
+
James Howe <https://github.com/OrangeDog> - improvement to cross-provider compatibility in JcaPKCS10CertificationRequest.
+
Steffen Heil <https://github.com/steffen-heil> - correction to error handling in Arrays.getLength().
+
Thomas D. <https://github.com/thomdev> - expansion of HPKE APIs, addition of user controlled ephemeral key to HPKE API.
+
Franz Fangmeyer <https://github.com/ff-wl> - exception handling for improper use of '=' in an X.500 RDN.
+
Jonathan Lennox <https://github.com/JonathanLennox> - fix DTLS retransmission bug with aggregated ChangeCipherSpec.
+
Thomas Devanneaux <tdevanneaux@apple.com> - extensions to the HPKE API to support encryption/decryption from byte ranges, allow sender selected ephemeral key.
+
Norman Maurer <norman_maurer@apple.com> - extensions to the HPKE API to support encryption/decryption from byte ranges, allow sender selected ephemeral key.
+
Bing Shi <roadicing@gmail.com> - addition of F2m bounds checking for imported EC F2m curves.
+
Phil Brown <https://github.com/brownp2k> - additional ant targets for building util and pkix.
+
Tamas Cservenak <https://github.com/cstamas> - initial patch for supporting Ed25519 keys in GnuPG S-expressions.
Seung Yeon <https://github.com/seungyeonpark> - addition of Memoable method implementations to CertPathValidationContext and CertificatePoliciesValidation.
+
yuhh0328 <https://github.com/yuhh0328> - initial patch for adding ML-KEM support to TLS.
+
Jan Oupický <https://github.com/Honzaik> - update to draft 13 of composite PQC signatures, patch for human readable algorithm name for composite private keys.
+
Karsten Otto <https://github.com/ottoka> - finished the support for jdk.tls.server.defaultDHEParameters.
+
Markus Sommer <https://github.com/marsom> - BCStyle lookup table fix for jurisdiction values.
+
Jared Crawford <https://github.com/jmcrawford45> - Abstracting cire KEM functionality out of DHKEM to allow for use of alternative KEMs with HPKE.
+
TaZbon <https://github.com/TaZbon> - Optional lax parsing patch for PEM parser.
+
han-ji <https://github.com/han-jl> - Fix to sign extension issue in CTR random seek code.
+
https://github.com/crlorentzen <https://github.com/crlorentzen> - Addition of system property for configuring GCM ciphers in 1.2 FIPS mode in the JSSE.
+
Jakub Zelenka <https://github.com/bukka> - Initial SMIMEAuthEnvelopedData classes.
moonfruit <https://github.com/moonfruit> - Patch to allow for extensions of GMSignatureSpi.
+
Marcono1234 <https://github.com/Marcono1234> - Updates to OpenBSDBCrypt JavaDoc.
+
DawidM <https://github.com/dawmit> - Implementation of EC J-PAKE.
+
Syed Quasim <https://github.com/HawkItzme> - lint checker fix for EST getTrustAllTrustManager().
+
winfriedgerlach <https://github.com/winfriedgerlach> - patch to SecretKeyUtil class, patch to DigestFactory cloner for SHA-1.
+
feuxfollets1013 <https://github.com/feuxfollets1013> - Initial add JDK21 KEM API implementation for HQC algorithm.
+
cragkhit <https://github.com/cragkhit> - addition of null check in some test utility methods to avoid needless exceptions.
+
zhsnew <https://github.com/zhsnew> - correct AsconCXof128 implementation and add test vectors
+
mt-johan <https://github.com/mt-johan> - patch to preserve PRF on initializing from protectionAlgorithm with PBMAC1.
+
oscerd <https://github.com/oscerd> - comment corrections in GMSSRootSig.java.
+
+
+
diff --git a/doc/LICENSE.html b/doc/LICENSE.html
new file mode 100644
index 0000000..c300d61
--- /dev/null
+++ b/doc/LICENSE.html
@@ -0,0 +1,22 @@
+
+
+
+Copyright (c) 2000-2023 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..226cdc5
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,110 @@
+
+
+The Bouncy Castle Crypto Package
+
+
+
+
+
+
The Bouncy Castle Crypto Package
+
+
+
+
+
+The Bouncy Castle Crypto package is a Java implementation of
+cryptographic algorithms, it was developed by the Legion of the
+Bouncy Castle, a registered Australian Charity, with a little help! The Legion, and the latest
+goings on with this package, can be found at
+https://www.bouncycastle.org.
+
+The Legion also gratefully acknowledges the contributions made to this
+package by others (see here
+for the current list). If you would like to contribute to our efforts please feel free to get in touch with us or visit our donations page, sponsor some specific work, or purchase a support contract through Crypto Workshop.
+
+
+The package is organised so that it
+contains a light-weight API suitable for use in any environment
+(including the newly released J2ME) with the additional infrastructure
+to conform the algorithms to the JCE framework.
+
+
+Except where otherwise stated, this software is distributed under a license based on the MIT X Consortium license. To view the license, see here. The OpenPGP library also includes a modified BZIP2 library which is licensed under the Apache Software License, Version 2.0.
+
+
+The current release notes for this package are
+here.
+
+
+The current specifications for this package are
+here.
+
+
+The current JavaDoc for the Bouncy Castle APIs can be found
+here.
+
+
+Additional documentation on use of the classes can also be found in the docs directory.
+
+
Examples and Tests
+
+
To view some examples, look at the test programs in the packages:
+
+
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
+
+
+
There are also some specific example programs for dealing with Attribute Certificates, PKCS12, SMIME and OpenPGP. They can be found in:
+
+
org.bouncycastle.jce.examples
+
org.bouncycastle.mail.smime.examples
+
org.bouncycastle.openpgp.examples
+
+
org.bouncycastle.x509.examples
+
+
+
Finally there are also code examples from Beginning Cryptography with Java which demonstrate both the use of the JCE/JCA and also some of the Bouncy Castle APIs.
+
+Note 1:The JCE classes are only distributed with the JDK 1.1, JDK 1.2, and JDK 1.3 JCE releases. The
+JDK 1.0, J2ME, and the JDK 1.1, JDK 1.2, JDK 1.3, JDK 1.4, and JDK 1.5 lightweight releases only include the
+Bouncy Castle lightweight cryptography API.
+Note 2:The regression test for Diffie-Hellman is quite slow.
+
+The clean room JCE, which will compile with everything from JDK 1.1 and up is in the jce/src/main/java directory.
+
+
+The build scripts that come with the full distribution allow creation of the different releases by using the tree under src and test/src, excluding classes that are not appropriate and copying in the required compatibility classes from the directories containing compatibility classes appropriate for the distribution.
+
+
+If you want to try create a build for yourself, using your own environment, the best way to do it is to start with the build for the distribution you are interested in, make sure that builds, and then modify your build scripts to do the required exclusions and file copies for your setup, otherwise you are likely to get class not found exceptions. The final caveat to this is that as the j2me distribution includes some compatibility classes starting in the java package, you need to use an obfuscator to change the package names before attempting to import a midlet using the BC API.
+
+
Mailing Lists
+
+For those who are interested, there are 2 mailing lists
+for participation in this project. To subscribe use the
+links below and include the word subscribe in the message body. (To unsubscribe, replace subscribe with
+unsubscribe in the message body)
+
dev-crypto-request@bouncycastle.org
+
+This mailing list is for discussion of development of the package. This
+includes bugs, comments, requests for enhancements, questions about
+use or operation.
+
+NOTE:You need to be subscribed to send mail to the above
+mailing list.
+
+The Bouncy Castle Crypto package is a Java implementation of
+cryptographic algorithms. The package is organised so that it
+contains a light-weight API suitable for use in any environment
+(including the J2ME) with the additional infrastructure
+to conform the algorithms to the JCE framework.
+
A potention NullPointerException in the KEM KDF KemUtil class has been removed.
+
Overlapping input/output buffers in doFinal could result in data corruption. This has been fixed.
+
Fixed Grain-128AEAD decryption incorrectly handle MAC verification.
+
Add configurable header validation to prevent malicious header injection in PGP cleartext signed messages; Fix signature packet encoding issues in PGPSignature.join() and embedded signatures while phasing out legacy format.
+
Fixed ParallelHash initialization stall when using block size B=0.
+
The PRF from the PBKDF2 function was been lost when PBMAC1 was initialized from protectionAlgorithm. This has been fixed.
+
The lowlevel DigestFactory was cloning MD5 when being asked to clone SHA1. This has been fixed.
+
+
2.1.3 Additional Features and Functionality
+
+
XWing implementation updated to draft-connolly-cfrg-xwing-kem/07/
+
Further support has been added for generation and use of PGP V6 keys
+
Additional validation has been added for armored headers in Cleartext Signed Messages.
+
The PQC signature algorithm proposal Mayo has been added to the low-level API and the BCPQC provider.
+
The PQC signature algorithm proposal Snova has been added to the low-level API and the BCPQC provider.
+
Support for ChaCha20-Poly1305 has been added to the CMS/SMIME APIs.
+
The Falcon implementation has been updated to the latest draft.
+
Support has been added for generating keys which encode as seed-only and expanded-key-only for ML-KEM and ML-DSA private keys.
+
Private key encoding of ML-DSA and ML-KEM private keys now follows the latest IETF draft.
+
The Ascon family of algorithms has been updated to the initial draft of SP 800-232. Some additional optimisation work has been done.
+
Support for ML-DSA's external-mu calculation and signing has been added to the BC provider.
+
CMS now supports ML-DSA for SignedData generation.
+
Introduce high-level OpenPGP API for message creation/consumption and certificate evaluation.
+
Added JDK21 KEM API implementation for HQC algorithm.
+
BCJSSE: Strip trailing dot from hostname for SNI, endpointID checks.
+
BCJSSE: Draft support for ML-KEM updated (draft-connolly-tls-mlkem-key-agreement-05).
+
BCJSSE: Draft support for hybrid ECDHE-MLKEM (draft-ietf-tls-ecdhe-mlkem-00).
+
BCJSSE: Optionally prefer TLS 1.3 server's supported_groups order (BCSSLParameters.useNamedGroupsOrder).
A splitting issue for ML-KEM lead to an incorrect size for kemct in KEMRecipientInfos. This has been fixed.
+
The PKCS12 KeyStore has been adjusted to prevent accidental doubling of the Oracle trusted certificate attribute (results in an IOException when used with the JVM PKCS12 implementation).
+
The SignerInfoGenerator copy constructor was ignoring the certHolder field. This has been fixed.
+
The getAlgorithm() method return value for a CompositePrivateKey was not consistent with the corresponding getAlgorithm() return value for the CompositePrivateKey. This has been fixed.
+
The international property files were missing from the bcjmail distribution. This has been fixed.
+
Issues with ElephantEngine failing on processing large/multi-block messages have been addressed.
+
GCFB mode now fully resets on a reset.
+
The lightweight algorithm contestants: Elephant, ISAP, PhotonBeetle, Xoodyak now support the use of the AEADParameters class and provide accurate update/doFinal output lengths.
+
An unnecessary downcast in CertPathValidatorUtilities was resulting in the ignoring of URLs for FTP based CRLs. This has been fixed.
+
A regression in the OpenPGP API could cause NoSuchAlgorithmException to be thrown when attempting to use SHA-256 in some contexts. This has been fixed.
+
EtsiTs1029411TypesAuthorization was missing an extension field. This has been added.
+
Interoperability issues with single depth LMS keys have been addressed.
+
+
2.2.3 Additional Features and Functionality
+
+
CompositeSignatures now updated to draft-ietf-lamps-pq-composite-sigs-03.
+
ML-KEM, ML-DSA, SLH-DSA, and Composite private keys now use raw encodings as per the latest drafts from IETF 121: draft-ietf-lamps-kyber-certificates-06, draft-ietf-lamps-dilithium-certificates-05, and draft-ietf-lamps-x509-slhdsa.
+
Initial support has been added for RFC 9579 PBMAC1 in the PKCS API.
+
Support has been added for EC-JPAKE to the lightweight API.
+
Support has been added for the direct construction of S/MIME AuthEnvelopedData objects, via the SMIMEAuthEnvelopedData class.
+
An override "org.bouncycastle.asn1.allow_wrong_oid_enc" property has been added to disable new OID encoding checks (use with caution).
+
Support has been added for the PBEParemeterSpec.getParameterSpec() method where supported by the JVM.
+
ML-DSA/SLH-DSA now return null for Signature.getParameters() if no context is provided. This allows the algorithms to be used with the existing Java key tool.
+
HQC has been updated to reflect the reference implementation released on 2024-10-30.
+
Support has been added to the low-level APIs for the OASIS Shamir Secret Splitting algorithms.
+
BCJSSE: System property "org.bouncycastle.jsse.fips.allowGCMCiphersIn12" no longer used. FIPS TLS 1.2 GCM suites can now be enabled according to JcaTlsCrypto#getFipsGCMNonceGeneratorFactory (see JavaDoc for details) if done in alignment with FIPS requirements.
+
Support has been added for OpenPGP V6 PKESK and message encryption.
+
PGPSecretKey.copyWithNewPassword() now includes AEAD support.
+
The ASCON family of algorithms have been updated in accordance with the published FIPS SP 800-232 draft.
Leading zeroes were sometimes dropped from Ed25519 signatures leading to verification errors in the PGP API. This has been fixed.
+
Default version string for Armored Output is now set correctly in 18on build.
+
The Elephant cipher would fail on large messages. This has been fixed.
+
CMSSignedData.replaceSigners() would re-encode the digest algorithms block, occassionally dropping ones where NULL had been previously added as an algorithm parameter. The method now attempts to only use the original digest algorithm identifiers.
+
ERSInputStreamData would fail to generate the correct hash if called a second time with a different hash algorithm. This has been fixed.
+
A downcast in the CrlCache which would cause FTP based CRLs to fail to load has been removed.
+
ECUtil.getNamedCurveOid() now trims curve names of excess space before look up.
+
The PhotonBeetle and Xoodyak digests did not reset properly after a doFinal() call. This has been fixed.
+
Malformed AlgorithmIdentifiers in CertIDs could cause caching issues in the OCSP cache. This has been fixed.
+
With Java 21 a provider service class will now be returned with a null class name where previously a null would have been returned for a service. This can cause a NullPointerException to be thrown by the BC provider if a non-existant service is requested. This issue has now been worked around.
+
CMS: OtherKeyAttribute.keyAttr now treated as optional.
+
CMS: EnvelopedData and AuthEnvelopedData could calculate the wrong versions. This has been fixed.
+
The default version header for PGP armored output did not carry the correct version string. This has been fixed.
+
In some situations the algorithm lookup for creating PGPDigestCalculators would fail due to truncation of the algorithm name. This has been fixed.
+
+
2.3.3 Additional Features and Functionality
+
+
Object Identifiers have been added for ML-KEM, ML-DSA, and SLH-DSA.
+
The PQC algorithms, ML-KEM, ML-DSA (including pre-hash), and SLH-DSA (including pre-hash) have been added to the BC provider and the lightweight API.
+
A new spec, ContextParameterSpec, has been added to support signature contexts for ML-DSA and SLH-DSA.
+
BCJSSE: Added support for security property "jdk.tls.server.defaultDHEParameters" (disabled in FIPS mode).
+
BCJSSE: Added support for signature_algorithms_cert configuration via "org.bouncycastle.jsse.client.SignatureSchemesCert" and "org.bouncycastle.jsse.server.SignatureSchemesCert" system properties or BCSSLParameters property "SignatureSchemesCert".
+
BCJSSE: Added support for boolean system property "org.bouncycastle.jsse.fips.allowGCMCiphersIn12" (false by default).
+
(D)TLS: Remove redundant verification of self-generated RSA signatures.
+
CompositePrivateKeys now support the latest revision of the composite signature draft.
+
Delta Certificates now support the latest revision of the delta certificate extension draft.
+
A general KeyIdentifier class, encapsulating both PGP KeyID and the PGP key fingerprint has been added to the PGP API.
+
Support for the LibrePGP PreferredEncryptionModes signature subpacket has been added to the PGP API.
+
Support for Version 6 signatures, including salts, has been added to the PGP API.
+
Support for the PreferredKeyServer signature supacket has been added to the PGP API.
+
Support for RFC 9269, "Using KEMs in Cryptographic Message Syntax (CMS)", has been added to the CMS API.
+
Support for the Argon2 S2K has been added to the PGP API.
+
The system property "org.bouncycastle.pemreader.lax" has been introduced for situations where the BC PEM parsing is now too strict.
+
The system property "org.bouncycastle.ec.disable_f2m" has been introduced to allow F2m EC support to be disabled.
Issues with a dangling weak reference causing intermittent NullPointerExceptions in the OcspCache have been fixed.
+
Issues with non-constant time RSA operations in TLS handshakes have been fixed.
+
Issue with Ed25519, Ed448 signature verification causing intermittent infinite loop have been fixed.
+
Issues with non-constant time ML-KEM implementation ("Kyber Slash") have been fixed.
+
Align ML-KEM input validation with FIPS 203 IPD requirements.
+
Make PEM parsing more forgiving of whitespace to align with RFC 7468 - Textual Encodings of PKIX, PKCS, and CMS Structures.
+
Fix CCM length checks with large nonce sizes (n=12, n=13).
+
EAC: Fixed the CertificateBody ASN.1 type to support an optional Certification Authority Reference in a Certificate Request.
+
ASN.1: ObjectIdentifier (also Relative OID) parsing has been optimized and the contents octets for both types are now limited to 4096 bytes.
+
BCJSSE: Fixed a missing null check on the result of PrivateKey.getEncoded(), which could cause issues for HSM RSA keys.
+
BCJSSE: When endpoint identification is enabled and an SSL socket is not created with an explicit hostname (as happens with HttpsURLConnection), hostname verification could be performed against a DNS-resolved IP address. This has been fixed.
+
The missing module import of java.logging to the provider module has been added.
+
GOST ASN.1 public key alg parameters are now compliant with RFC 9215.
+
An off-by-one error in the encoding for EccP256CurvePoint for ITS has been fixed.
+
PEM Parser now enforces PEM headers to start at the beginning of the line to be meaningful.
Both versions of NTRUPrime have been updated to produce 256 bit secrets in line with Kyber. This should also bring them into line with other implementations such as those used in OpenSSH now.
+
BCJSSE: The boolean system property 'org.bouncycastle.jsse.fips.allowRSAKeyExchange" now defaults to false. All RSA
+key exchange cipher suites will therefore be disabled when the BCJSSE provider is used in FIPS mode, unless this system
+property is explicitly set to true.
+
OSGi compatibility should now be much improved.
+
SignedMailValidator now includes a more general rollback method for locating the signature's trust anchor for use when the first approach fails.
+
The PKCS12 store using GCM does not include the PKCS#12 MAC so no longer includes use of the PKCS#12 PBE scheme and only uses PBKDF2.
+
In keeping with the current set of experimental OIDs for PQC algorithms, OIDs may have changed to reflect updated versions of the algorithms.
+
+
2.5.5 Security Advisories.
+
+Release 1.78 deals with the following CVEs:
+
+
+
CVE-2024-29857 - Importing an EC certificate with specially crafted F2m parameters can cause high CPU usage during parameter evaluation.
+
CVE-2024-30171 - Possible timing based leakage in RSA based handshakes due to exception processing eliminated.
+
CVE-2024-30172 - Crafted signature and public key can be used to trigger an infinite loop in the Ed25519 verification code.
+
CVE-2024-34447 - When endpoint identification is enabled in the BCJSSE and an SSL socket is not created with an explicit hostname (as happens with HttpsURLConnection), hostname verification could be performed against a DNS-resolved IP address. This has been fixed.
Using an unescaped '=' in an X.500 RDN would result in the RDN being truncated silently. The issue is now detected and an exception is thrown.
+
asn1.eac.CertificateBody was returning certificateEffectiveDate from getCertificateExpirationDate(). This has been fixed to return certificateExpirationDate.
+
DTLS: Fixed retransmission in response to re-receipt of an aggregated ChangeCipherSpec.
+
(D)TLS: Fixed compliance for supported_groups extension. Server will no longer negotiate an EC cipher suite using a default curve when the ClientHello includes
+the supported_groups extension but it contains no curves in common with the server. Similarly, a DH cipher suite will not be negotiated when the ClientHello includes
+supported_groups, containing at least one FFDHE group, but none in common with the server.
+
IllegalStateException was being thrown by the Ed25519/Ed448 SignatureSpi. This has been fixed.
+
TLS: class annotation issues that could occur between the BC provider and the TLS API for the GCMParameterSpec class when the jars were loaded on the boot class path have been addressed.
+
Attempt to create an ASN.1 OID from a zero length byte array is now caught at construction time.
+
Attempt to create an X.509 extension block which is empty will now be blocked cause an exception.
+
IES implementation will now accept a null ParameterSpec if no nonce is needed.
+
An internal method in Arrays was failing to construct its failure message correctly on an error. This has been fixed.
+
HSSKeyPublicParameters.generateLMSContext() would fail for a unit depth key. This has been fixed.
+
+
2.6.3 Additional Features and Functionality
+
+
BCJSSE: Added org.bouncycastle.jsse.client.omitSigAlgsCertExtension and org.bouncycastle.jsse.server.omitSigAlgsCertExtension boolean system properties
+to control (for client and server resp.) whether the signature_algorithms_cert extension should be omitted if it would be identical to signature_algorithms.
+Defaults to true, the historical behaviour.
+
The low-level HPKE API now allows the sender to specify an ephemeral key pair.
+
Support has been added for the delta-certificate requests in line with the current Chameleon Cert draft from the IETF.
+
Some accommodation has been added for historical systems to accommodate variations in the SHA-1 digest OID for CMS SignedData.
+
TLS: the TLS API will now try "RSAwithDigestAndMFG1" as well as the newer RSAPSS algorithm names when used with the JCA.
+
TLS: RSA key exchange cipher suites are now disabled by default.
+
Support has been added for PKCS#10 requests to allow certificates using the altSignature/altPublicKey extensions.
+
+
2.6.4 Notes.
+
+
Kyber and Dilithium have been updated according to the latest draft of the standard. Dilithium-AES and Kyber-AES have now been removed. Kyber now produces 256 bit secrets for all parameter sets (in line with the draft standard).
+
NTRU has been updated to produce 256 bit secrets in line with Kyber.
+
SPHINCS+ can now be used to generate certificates in line with those used by (Open Quantum Safe) OQS.
+
Falcon object identifiers are now in line with OQS as well.
+
PQC CMS SignedData now defaults to SHA-256 for signed attributes rather than SHAKE-256. This is also a compatibility change, but may change further again as the IETF standard for CMS is updated.
Service allocation in the provider could fail due to the lack of a permission block. This has been fixed.
+
JceKeyFingerPrintCalculator has been generalised for different providers by using "SHA-256" for the algorithm string.
+
BCJSSE: Fixed a regression in 1.74 (NullPointerException) that prevents a BCJSSE server from negotiating TLSv1.1 or earlier.
+
DTLS: Fixed server support for client_certificate_type extension.
+
Cipher.unwrap() for HQC could fail due to a miscalculation of the length of the KEM packet. This has been fixed.
+
There was exposure to a Java 7 method in the Java 5 to Java 8 BCTLS jar which could cause issues with some TLS 1.2 cipher suites running on older JVMs. This is now fixed.
+
+
2.7.3 Additional Features and Functionality
+
+
BCJSSE: Following OpenJDK, finalizers have been removed from SSLSocket subclasses. Applications should close sockets and not rely on garbage collection.
+
BCJSSE: Added support for boolean system property "jdk.tls.client.useCompatibilityMode" (default "true").
+
DTLS: Added server support for session resumption.
+
JcaPKCS10CertificationRequest will now work with EC on the OpenJDK provider.
+
TimeStamp generation now supports the SHA3 algorithm set.
+
The SPHINCS+ simple parameters are now fully supported in the BCPQC provider.
+
Kyber, Classic McEliece, HQC, and Bike now supported by the CRMF/CMS/CMP APIs.
+
Builder classes have been add for PGP ASCII Armored streams allowing CRCs and versions to now be optional.
+
An UnknownPacket type has been added to the PGP APIs to allow for forwards compatibility with upcoming revisions to the standard.
AsconEngine: Fixed a buffering bug when decrypting across multiple processBytes calls (ascon128a unaffected).
+
Context based sanity checking on PGP signatures has been added.
+
The ParallelHash clone constructor was not copying all fields. This is now fixed.
+
The maximimum number of blocks for CTR/SIC modes was 1 block less than it should have been. This is now fixed.
+
+
2.9.3 Additional Features and Functionality
+
+
The PGP API now supports wildcard key IDs for public key based data encryption.
+
LMS now supports SHA256/192, SHAKE256/192, and SHAKE256/256 (the additional SP 8000-208 parameter sets).
+
The PGP API now supports V5 and V6 AEAD encryption for encrypted data packets.
+
The PGP examples have been updated to reflect key size and algorithm changes that have occurred since they were first written (10+ years...).
+
(D)TLS: A new callback 'TlsPeer.notifyConnectionClosed' will be called when the connection is closed (including by failure).
+
BCJSSE: Improved logging of connection events and include unique IDs in connection-specific log messages.
+
BCJSSE: Server now logs the offered cipher suites when it fails to select one.
+
BCJSSE: Added support for SSLParameters namedGroups and signatureSchemes properties (can also be used via BCJSSE extension API in earlier Java versions).
+
DTLS: The initial handshake re-send time is now configurable by overriding 'TlsPeer.getHandshakeResendTimeMillis'.
+
DTLS: Added support for connection IDs per RFC 9146.
+
DTLS: Performance of DTLSVerifier has been improved so that it can reasonably be used for all incoming packets.
The PGP API now supports parsing, encoding, and fingerprinting of V6 EC/EdEC keys.
+
A thread safe verifier API has been added to the PGP API to support multi-threaded verification of certifications on keys and user IDs.
+
The number of keys/sub-keys in a PGPKeyRing can now be found by calling PGPKeyRing.size().
+
The PQC algorithms LMS/HSS, SPHINCS+, Dilithium, Falcon, and NTRU are now supported directly by the BC provider.
+
+
2.9.4 Notes.
+
+
The now defunct PQC SIKE algorithm has been removed, this has also meant the removal of its resource files so the provider is now quite a bit smaller.
+
As a precaution, HC128 now enforces a 128 bit IV, previous behaviour for shorter IVs can be supported where required by padding the IV to the 128 bits with zero.
+
PGP encrypted data generation now uses integrity protection by default. Previous behaviour for encrypted data can be supported where required by calling PGPDataEncryptorBuilder.setWithIntegrityPacket(false) when data encryption is set up.
+
There are now additional sanity checks in place to prevent accidental mis-use of PGPSignature objects. If this change causes any issues, you might want to check what your code is up to as there is probably a bug.
+
+
2.9.5 Security Advisories.
+
+
CVE-2023-33201 - this release fixes an issue with the X509LDAPCertStoreSpi where a specially crafted certificate subject could be used to try and extract extra information out of an LDAP server with wild-card matching enabled.
BCJSSE: Instantiating a JSSE provider in some contexts could cause an AccessControl exception. This has been fixed.
+
The EC key pair generator can generate out of range private keys when used with SM2. A specific SM2KeyPairGenerator has been added to the low-level API and is used by KeyPairGenerator.getInstance("SM2", "BC"). The SM2 signer has been updated to check for out of range keys as well..
+
The attached signature type byte was still present in Falcon signatures as well as the detached signature byte. This has been fixed.
+
There was an off-by-one error in engineGetOutputSize() for ECIES. This has been fixed.
+
The method for invoking read() internally in BCPGInputStream could result in inconsistent behaviour if the class was extended. This has been fixed.
+
Fixed a rounding issue with FF1 Format Preserving Encryption algorithm for certain radices.
+
Fixed RFC3394WrapEngine handling of 64 bit keys.
+
Internal buffer for blake2sp was too small and could result in an ArrayIndexOutOfBoundsException. This has been fixed.
+
JCA PSS Signatures using SHAKE128 and SHAKE256 now support encoding of algorithm parameters.
+
PKCS10CertificationRequest now checks for empty extension parameters.
+
Parsing errors in the processing of PGP Armored Data now throw an explicit exception ArmoredInputException.
+
PGP AEAD streams could occassionally be truncated. This has been fixed.
+
The ESTService class now supports processing of chunked HTTP data.
+
A constructed ASN.1 OCTET STRING with a single member would sometimes be re-encoded as a definite-length OCTET STRING. The encoding has been adjusted to preserve the BER status of the object.
+
PKIXCertPathReviewer could fail if the trust anchor was also included in the certificate store being used for path analysis. This has been fixed.
+
UTF-8 parsing of an array range ignored the provided length. This has been fixed.
+
IPAddress has been written to provide stricter checking and avoid the use of Integer.parseInt().
+
A Java 7 class snuck into the Java 5 to Java 8 build. This has been addressed.
+
+
2.10.3 Additional Features and Functionality
+
+
The Rainbow NIST Post Quantum Round-3 Candidate has been added to the low-level API and the BCPQC provider (level 3 and level 5 parameter sets only).
+
The GeMSS NIST Post Quantum Round-3 Candidate has been added to the low-level API.
+
The org.bouncycastle.rsa.max_mr_tests property check has been added to allow capping of MR tests done on RSA moduli.
+
Significant performance improvements in PQC algorithms, especially BIKE, CMCE, Frodo, HQC, Picnic.
+
+ EdDSA verification now conforms to the recommendations of Taming the many EdDSAs, in particular cofactored verification.
+ As a side benefit, Pornin's basis reduction is now used for EdDSA verification, giving a significant performance boost.
+
+
Major performance improvements for Anomalous Binary (Koblitz) Curves.
+
The lightweight Cryptography finalists Ascon, ISAP, Elephant, PhotonBeetle, Sparkle, and Xoodyak have been added to the light-weight cryptography API.
+
BLAKE2bp and BLAKE2sp have been added to the light-weight cryptography API.
+
Support has been added for X.509, Section 9.8, hybrid certificates and CRLs using alternate public keys and alternate signatures.
+
The property "org.bouncycastle.emulate.oracle" has been added to signal the provider should return algorithm names on some algorithms in the same manner as the Oracle JCE provider.
+
An extra replaceSigners method has been added to CMSSignedData which allows for specifying the digest algorithm IDs to be used in the new CMSSignedData object.
+
Parsing and re-encoding of ASN.1 PEM data has been further optimized to prevent unecessary conversions between basic encoding, definite length, and DER.
Support has been added for certEncr in CRMF to allow issuing of certificates for KEM public keys.
+
Further speedups have been made to CRC24.
+
GCMParameterSpec constructor caching has been added to improve performance for JVMs that have the class available.
+
The PGPEncrytedDataGenerator now supports injecting the session key to be used for PGP PBE encrypted data.
+
The CRMF CertificateRequestMessageBuilder now supports optional attributes.
+
Improvements to the s calculation in JPAKE.
+
A general purpose PQCOtherInfoGenerator has been added which supports all Kyber and NTRU.
+
An implementation of HPKE (RFC 9180 - Hybrid Public Key Encryption) has been added to the light-weight cryptography API.
+
+
2.10.4 Security Advisories.
+
+
The PQC implementations have now been subject to formal review for secret leakage and side channels, there were issues in BIKE, Falcon, Frodo, HQC which have now been fixed. Some weak positives also showed up in Rainbow, Picnic, SIKE, and GeMSS - for now this last set has been ignored as the algorithms will either be updated if they reappear in the Signature Round, or deleted, as is already the case for SIKE (it is now in the legacy package). Details on the group responsible for the testing can be found in the CONTRIBUTORS file.
+
For at least some ECIES variants (e.g. when using CBC) there is an issue with potential malleability of a nonce (implying silent malleability of the plaintext) that must be sent alongside the ciphertext but is outside the IES integrity check. For this reason the automatic generation of nonces with IED is now disabled and they have to be passed in using an IESParameterSpec. The current advice is to agree on a nonce between parties and then rely on the use of the ephemeral key component to allow the nonce (rather the so called nonce) usage to be extended.
+
+
2.10.5 Notes.
+
+
Most test data files have now been migrated to a separate project bc-test-data which is also available on github. If you clone bc-test-data at the same level as the bc-java project the tests will find the test data they require.
+
There has been further work to make entropy collection more friendly in container environments. See DRBG.java for details. We would welcome any further feedback on this as we clearly cannot try all situations first hand.
There were parameter errors in XMSS^MT OIDs for XMSSMT_SHA2_40/4_256 and XMSSMT_SHA2_60/3_256. These have been fixed.
+
There was an error in Merkle tree construction for the Evidence Records (ERS) implementation which could result in invalid roots been timestamped. ERS now produces an ArchiveTimeStamp for each data object/group with an associated reduced hash tree. The reduced hash tree is now calculated as a simple path to the root of the tree for each record.
+
OpenPGP will now ignore signatures marked as non-exportable on encoding.
+
A tagging calculation error in GCMSIV which could result in incorrect tags has been fixed.
+
Issues around Java 17 which could result in failing tests have been addressed.
+
+
2.13.3 Additional Features and Functionality
+
+
BCJSSE: TLS 1.3 is now enabled by default where no explicit protocols are supplied (e.g. "TLS" or "Default" SSLContext algorithms, or SSLContext.getDefault() method).
+
BCJSSE: Rewrite SSLEngine implementation to improve compatibility with SunJSSE.
+
BCJSSE: Support export of keying material via extension API.
+
(D)TLS: Add support for 'tls-exporter' channel binding per RFC 9266.
+
(D)TLS (low-level API): By default, only (D)TLS 1.2 and TLS 1.3 are offered now. Earlier versions are still supported if explicitly enabled. Users may need to check they are offering suitable cipher suites for TLS 1.3.
+
(D)TLS (low-level API): Add support for raw public keys per RFC 7250.
+
CryptoServicesRegistrar now has a setServicesConstraints() method on it which can be used to selectively turn off algorithms.
+
The NIST PQC Alternate Candidate, Picnic, has been added to the low level API and the BCPQC provider.
+
SPHINCS+ has been upgraded to the latest submission, SPHINCS+ 3.1 and support for Haraka has been added.
+
Evidence records now support timestamp renewal and hash renewal.
+
The SIKE Alternative Candidate NIST Post Quantum Algorithm has been added to the low-level API and the BCPQC provider.
+
The NTRU Round 3 Finalist Candidate NIST Post Quantum Algorithm has been added to the low-level API and the BCPQC provider.
+
The Falcon Finalist NIST Post Quantum Algorithm has been added to the low-level API and the BCPQC provider.
+
The CRYSTALS-Kyber Finalist NIST Post Quantum Algorithm has been added to the low-level API and the BCPQC provider.
+
Argon2 Support has been added to the OpenPGP API.
+
XDH IES has now been added to the BC provider.
+
The OpenPGP API now supports AEAD encryption and decryption.
+
The NTRU Prime Alternative Candidate NIST Post Quantum Algorithms have been added to the low-level API and the BCPQC provider.
+
The CRYSTALS-Dilithium Finalist NIST Post Quantum Algorithm has been added to the low-level API and the BCPQC provider.
+
The BIKE NIST Post Quantum Alternative/Round-4 Candidate has been added to the low-level API and the BCPQC provider.
+
The HQC NIST Post Quantum Alternative/Round-4 Candidate has been added to the low-level API and the BCPQC provider.
+
Grain128AEAD has been added to the lightweight API.
+
A fast version of CRC24 has been added for use with the PGP API.
+
Some additional methods and fields have been exposed in the PGPOnePassSignature class to (hopefully) make it easier to deal with nested signatures.
+
CMP support classes have been updated to reflect the latest editions to the the draft RFC "Lightweight Certificate Management Protocol (CMP) Profile".
+
Support has been added to the PKCS#12 implementation for the Oracle trusted certificate attribute.
+
Performance of our BZIP2 classes has been improved.
+
+
2.13.4 Notes
+
+Keep in mind the PQC algorithms are still under development and we are still at least a year and a half away from published standards. This means the algorithms may still change so by all means experiment, but do not use the PQC algoritms for anything long term.
+
+
+The legacy "Rainbow" and "McEliece" implementations have been removed from the BCPQC provider. The underlying classes are still present if required. Other legacy algorithm implementations can be found under the org.bouncycastle.pqc.legacy package.
+
+
2.13.5 Security Notes
+
+The PQC SIKE algorithm is provided for research purposes only. It should now be regarded as broken. The SIKE implementation will be withdrawn in BC 1.73.
+
In line with GPG the PGP API now attempts to preserve comments containing non-ascii UTF-8 characters.
+
An accidental partial dependency on Java 1.7 has been removed from the TLS API.
+
JcaPKIXIdentityBuilder would fail to process File objects correctly. This is now fixed.
+
Some byte[] parameters to the CMP API were not being defensively cloned to prevent accidental changes. Extra defensive cloning has been added.
+
CMS primitives would sometimes convert ASN.1 definite-length encodings into indefinite-length encodings. The primitives will now try and preserve the original encoding where possible.
+
CMSSignedData.getAttributeCertificates() now properly restricts the tag values checked to just 1 (the obsolete v1 tag) and 2 (for the more current v2 certificates).
+
BCJSSE now tries to validate a custom KeyManager selection in order to catch errors around a key manager ignoring key type early.
+
Compressed streams in PGP ending with zero length partial packets could cause failure on parsing the OpenPGP API. This has been fixed.
+
The fallback mode for JceAsymmetricKeyWrapper/Unwrapper would lose track of any algorithm parameters generated in the initial attempt. The algorithm parameters are now propagated.
+
An accidental regression introduced by a fix for another issue in PKIXCertPathReviewer around use of the AuthorityKeyIdentifier extension and it failing to match a certificate uniquely when the serial number field is missing has been fixed.
+
An error was found in the creation of TLS 1.3 Export Keying Material which could cause compatibility issues. This has been fixed.
+
+
2.14.3 Additional Features and Functionality
+
+
Support has been added for OpenPGP regular expression signature packets.
+
Support has been added for OpenPGP PolicyURI signature packets.
+
A utility method has been added to PGPSecretKeyRing to allow for inserting or replacing a PGPPublicKey.
+
A utility method has been added to PGPSecretKeyRing to allow for inserting or replacing a PGPPublicKey.
+
The NIST PQC Finalist, Classic McEliece has been added to the low level API and the BCPQC provider.
+
The NIST PQC Alternate Candidate, SPHINCS+ has been added to the BCPQC provider.
+
The NIST PQC Alternate Candidate, FrodoKEM has been added to the low level API and the BCPQC provider.
+
The NIST PQC Finalist, SABER has been added to the low level API and the BCPQC provider.
+
KMAC128, KMAC256 has been added to the BC provider (empty customization string).
+
TupleHash128, TupleHash256 has been added to the BC provider (empty customization string).
+
ParallelHash128, ParallelHash256 has been added to the BC provider (empty customization string, block size 1024 bits).
+
Two new properties: "org.bouncycastle.rsa.max_size" (default 15360) and "org.bouncycastle.ec.fp_max_size" (default 1042) have been added to cap the maximum size of RSA and EC keys.
+
RSA modulus are now checked to be provably composite using the enhanced MR probable prime test.
+
Imported EC Fp basis values are now validated against the MR prime number test before use. The certainty level of the prime test can be determined by "org.bouncycastle.ec.fp_certainty" (default 100).
+
The BC entropy thread now has a specific name: "BC-ENTROPY-GATHERER".
+
Utility methods have been added for joining/merging PGP public keys and signatures.
+
Blake3-256 has been added to the BC provider.
+
DTLS: optimisation to delayed handshake hash.
+
Further additions to the ETSI 102 941 support in the ETSI/ITS package: certification request, signed message generation and verification now supported.
+
CMSSignedDataGenerator now supports the direct generation of definite-length data.
+
The NetscapeCertType class now has a hasUsages() method on it for querying usage settings on its bit string.
+
Support for additional input has been added for deterministic (EC)DSA.
+
The OpenPGP API provides better support for subkey generation.
+
BCJSSE: Added boolean system properties "org.bouncycastle.jsse.client.dh.disableDefaultSuites" and "org.bouncycastle.jsse.server.dh.disableDefaultSuites".
+Default "false". Set to "true" to disable inclusion of DH cipher suites in the default cipher suites for client/server respectively.
+
ASN.1 object support has been added for the Lightweight Certificate Management Protocol (CMP), currently in draft.
+
A HybridValueParamterSpec class has been added for use with KeyAgreement to support SP 800-56C hybrid (so classical/post-quantum) key agreement.
+
+
2.14.4 Notes
+
+
The deprecated QTESLA implementation has been removed from the BCPQC provider.
+
The submission update to SPHINCS+ has been added. This changes the generation of signatures - particularly deterministic ones.
The PKCS12 KeyStore was relying on default precedence for its key Cipher implementation so was sometimes failing if used from the keytool. The KeyStore class now makes sure it uses the correct Cipher implementation.
+
Fixed bzip2 compression for empty contents (GH #993).
+
ASN.1: More robust handling of high tag numbers and definite-length forms.
+
BCJSSE: Fix a concurrent modification issue in session contexts (GH#968).
+
BCJSSE: Don't log sensitive system property values (GH#976).
+
BCJSSE: Fixed a priority issue amongst imperfect-match credentials in KeyManager classes.
+
The IES AlgorithmParameters object has been re-written to properly support all the variations of IESParameterSpec.
+
getOutputSize() for ECIES has been corrected to avoid occassional underestimates.
+
The lack of close() in the ASN.1 Dump command line utility was triggering false positives in some code analysis tools. A close() call has been added.
+
PGPPublicKey.getBitStrength() now properly recognises EdDSA keys.
+
+
2.15.3 Additional Features and Functionality
+
+
Missing PGP CRC checksums can now be optionally ignored using setDetectMissingCRC() (default false) on ArmoredInputStream.
+
PGPSecretKey.copyWithNewPassword() now has a variant which uses USAGE_SHA1 for key protection if a PGPDigestCalculator is passed in.
+
PGP ASCII armored data now skips "\t", "\v", and "\f".
+
PKCS12 files with duplicate localKeyId attributes on certificates will now have the incorrect attributes filtered out, rather than the duplicate causing an exception.
+
PGPObjectFactory will now ignore packets representing unrecognised signature versions in the input stream.
+
The X.509 extension generator will now accumulate some duplicate X.509 extensions into a single extension where it is possible to do so.
+
Removed support for maxXofLen in Kangaroo digest.
+
Ignore marker packets in PGP Public and Secret key ring collection.
+
An implementation of LEA has been added to the low-level API.
+
Access, recovery, and direct use for PGP session keys has been added to the OpenPGP API for processing encrypted data.
+
A PGPCanonicalizedDataGenerator has been added which converts input into canonicalized literal data for text and UTF-8 mode.
+
A getUserKeyingMaterial() method has been added to the KeyAgreeRecipientInformation class.
+
ASN.1: Tagged objects (and parsers) now support all tag classes. Special code for ApplicationSpecific has been deprecated and
+re-implemented in terms of TaggedObject.
+
ASN.1: Improved support for nested tagging.
+
ASN.1: Added support for GraphicString, ObjectDescriptor, RelativeOID.
+
ASN.1: Added support for constructed BitString encodings, including efficient parsing for large values.
+
TLS: Added support for external PSK handshakes.
+
TLS: Check policy restrictions on key size when determining cipher suite support.
+
A performance issue in KeccakDigest due to left over debug code has been identified and dealt with.
+
BKS key stores can now be used for collecting protected keys (note: any attempt to store such a store will cause an exception).
+
A method for recovering user keying material has been added to KeyAgreeRecipientInformation.
+
Support has been added to the CMS API for SHA-3 based PLAIN-ECDSA.
+
The low level BcDefaultDigestProvider now supports the SHAKE family of algorithms and the SM3 alogirthm.
+
PGPKeyRingGenerator now supports creation of key-rings with direct-key identified keys.
+
The PQC NIST candidate, signature algorithm SPHINCS+ has been added to the low-level API.
+
ArmoredInputStream now explicitly checks for a '\n' if in crLF mode.
+
Direct support for NotationDataOccurances, Exportable, Revocable, IntendedRecipientFingerPrints, and AEAD algorithm preferences has been added to PGPSignatureSubpacketVector.
+
Further support has been added for keys described using S-Expressions in GPG 2.2.X.
+
Support for OpenPGP Session Keys from the (draft) Stateless OpenPGP CLI has been added.
+
Additional checks have been added for PGP marker packets in the parsing of PGP objects.
+
A CMSSignedData.addDigestAlgorithm() has been added to allow for adding additional digest algorithm identifiers to CMS SignedData structures when required.
+
Support has been added to CMS for the LMS/HSS signature algorithm.
+
The system property "org.bouncycastle.jsse.client.assumeOriginalHostName" (default false) has been added for dealing with SNI problems related to the host name not being propagate by the JVM.
+
The JcePKCSPBEOutputEncryptorBuilder now supports SCRYPT with ciphers that do not have algorithm parameters (e.g. AESKWP).
+
Support is now added for certificates using ETSI TS 103 097, "Intelligent Transport Systems (ITS)" in the bcpkix package.
+
+
2.15.4 Notes.
+
+
While this release should maintain source code compatibility, developers making use of some parts of the ASN.1 library will find that some classes need recompiling. Apologies for the inconvenience.
Lightweight and JCA conversion of Ed25519 keys in the PGP API could drop the leading byte as it was zero. This has been fixed.
+
Marker packets appearing at the start of PGP public key rings could cause parsing failure. This has been fixed.
+
ESTService could fail for some valid Content-Type headers. This has been fixed.
+
Originator key algorithm parameters were being passed as NULL in key agreement recipients. The parameters now reflect the value of the parameters in the key's SubjectPublicKeyInfo.
+
ContentType on encapsulated data was not been passed through correctly for authenticated and enveloped data. This has been fixed.
+
NTRUEncryptionParameters and NTRUEncryptionKeyGenerationParameters were not correctly cloning the contained message digest. This has been fixed.
+
CertificateFactory.generateCertificates()/generateCRLs() would throw an exception if extra data was found at the end of a PEM file even if valid objects had been found. Extra data is now ignored providing at least one object found.
+
Internal class PKIXCRLUtil could throw a NullPointerException for CRLs with an absent nextUpdate field. This has been fixed.
+
PGP ArmoredInputStream now fails earlier on malformed headers.
+
The McElieceKobaraImaiCipher was randomly throwing "Bad Padding: invalid ciphertext" exception while decrypting due to leading zeroes been missed during processing of the cipher text. This has been fixed.
+
Ed25519 keys being passed in via OpenSSH key spec are now validated in the KeyFactory.
+
Blowfish keys are now range checked on cipher construction.
+
In some cases PGPSecretKeyRing was failing to search its extraPubKeys list when searching for public keys.
+
The BasicConstraintsValidation class in the BC cert path validation tools has improved conformance to RFC 5280.
+
AlgorithmIdentifiers involving message digests now attempt to follow the latest conventions for the parameters field (basically DER NULL appears less).
+
Fix various conversions and interoperability for XDH and EdDSA between BC and SunEC providers.
+
TLS: Prevent attempts to use KeyUpdate mechanism in versions before TLS 1.3.
+
+
2.16.3 Additional Features and Functionality
+
+
GCM-SIV has been added to the lightweight API and the provider.
+
Blake3 has been added to the lightweight API.
+
The OpenSSL PEMParser can now be extended to add specialised parsers.
+
Base32 encoding has now been added, the default alphabet is from RFC 4648.
+
The KangarooTwelve message digest has been added to the lightweight API.
+
An implementation of the two FPE algorithms, FF1 and FF3-1 in SP 800-38G has been added to the lightweight API and the JCE provider.
+
An implementation of ParallelHash has been added to the lightweight API.
+
An implementation of TupleHash has been added to the lightweight API.
+
RSA-PSS now supports the use of SHAKE128 and SHAKE256 as the mask generation function and digest.
+
ECDSA now supports the use of SHAKE128 and SHAKE256.
+
PGPPBEEncryptedData will now reset the stream if the initial checksum fails so another password can be tried.
+
Iterators on public and secret key ring collections in PGP now reflect the original order of the public/secret key rings they contain.
+
KeyAgreeRecipientInformation now has a getOriginator() method for retrieving the underlying orginator information.
+
PGPSignature now has a getDigestPrefix() method for people wanting exposure to the signature finger print details.
+
The old BKS-V1 format keystore is now disabled by default. If you need to use BKS-V1 for legacy reasons, it can be re-enabled by adding:
+
+org.bouncycastle.bks.enable_v1=true
+
+to the java.security file. We would be interested in hearing from anyone that needs to do this.
+
PLAIN-ECDSA now supports the SHA3 digests.
+
Some highlevel support for RFC 4998 ERS has been added for ArchiveTimeStamp and EvidenceRecord. The new classes are in
+the org.bouncycastle.tsp.ers package.
+
ECIES has now also support SHA256, SHA384, and SHA512.
+
digestAlgorithms filed in CMS SignedData now includes counter signature digest algorithms where possible.
+
A new property "org.bouncycastle.jsse.config" has been added which can be used to configure the BCJSSE provider when it is created using the no-args constructor.
+
In line with changes in OpenSSL 1.1.0, OpenSSLPBEParametersGenerator can now be configured with a digest.
+
PGPKeyRingGenerator now includes a method for adding a subkey with a primary key binding signature.
+
Support for ASN.1 PRIVATE tags has been added.
+
Performance enhancements to Nokeon, AES, GCM, and SICBlockCipher.
+
Support for ecoding/decoding McElieceCCA2 keys has been added to the PQC API
+
BCJSSE: Added support for jdk.tls.maxCertificateChainLength system property (default is 10).
+
BCJSSE: Added support for jdk.tls.maxHandshakeMessageSize system property (default is 32768).
+
BCJSSE: Added support for jdk.tls.client.enableCAExtension (default is 'false').
+
BCJSSE: Added support for jdk.tls.client.cipherSuites system property.
+
BCJSSE: Added support for jdk.tls.server.cipherSuites system property.
+
BCJSSE: Extended ALPN support via standard JSSE API to JDK 8 versions after u251/u252.
+
BCJSSE: Key managers now support EC credentials for use with TLS 1.3 ECDSA signature schemes (including brainpool).
+
TLS: Add TLS 1.3 support for brainpool curves per RFC 8734.
+
+
2.16.4 Notes
+
+
There is a small API change in the PKIX package to the DigestAlgorithmIdentifierFinder interface as a find() method that takes an ASN1ObjectIdentifier has been added to it. For people wishing to extend their own implementations, see DefaultDigestAlgorithmIdentifierFinder for a sample implementation.
+
A version of the bcmail API supporting Jakarta Mail has now been added (see bcjmail jar).
+
Some work has been done on moving out code that does not need to be in the provider jar. This has reduced the size of the provider jar and should also make it easier for developers to patch the classes involved as they no longer need to be signed. bcpkix and bctls are both dependent on the new bcutil jar.
Some BigIntegers utility methods would fail for BigInteger.ZERO. This has been fixed.
+
PGPUtil.isKeyRing() was not detecting secret sub-keys in its input. This has been fixed.
+
The ASN.1 class, ArchiveTimeStamp was insisting on a value for the optional reducedHashTree field. This has been fixed.
+
BCJSSE: Lock against multiple writers - a possible synchronization issue has been removed.
+
+
2.17.3 Additional Features and Functionality
+
+
BCJSSE: Added support for system property com.sun.net.ssl.requireCloseNotify. Note that we are using a default value of 'true'.
+
BCJSSE: 'TLSv1.3' is now a supported protocol for both client and server. For this release it is only enabled by default for the 'TLSv1.3' SSLContext, but can be explicitly enabled using 'setEnabledProtocols' on an SSLSocket or SSLEngine, or via SSLParameters.
+
BCJSSE: Session resumption is now also supported for servers in TLS 1.2 and earlier. For this release it is disabled by default, and can be enabled by setting the boolean system property org.bouncycastle.jsse.server.enableSessionResumption to 'true'.
+
The provider RSA-PSS signature names that follow the JCA naming convention.
+
FIPS mode for the BCJSSE now enforces namedCurves for any presented certificates.
+
PGPSignatureSubpacketGenerator now supports editing of a pre-existing sub-packet list.
BCJSSE: SunJSSE compatibility fix - override of getChannel() removed and 'urgent data' behaviour should now conform to what the SunJSSE expects.
+
Nested BER data could sometimes cause issues in octet strings. This has been fixed.
+
Certificates/CRLs with short signatures could cause an exception in toString() in the BC X509 Certificate implmentation. This has been fixed.
+
In line with latest changes in the JVM, SignatureSpis which don't require parameters now return null on engineGetParameters().
+
The RSA KeyFactory now always preferentially produces RSAPrivateCrtKey where it can on requests for a KeySpec based on an RSAPrivateKey.
+
CMSTypedStream$FullReaderStream now handles zero length reads correctly.
+
Unecessary padding was added on KMAC when the key length was block aligned. This has been fixed.
+
Zero length data would cause an unexpected exception from RFC5649WrapEngine. This has been fixed.
+
OpenBSDBcrypt was failing to handle some valid prefixes. This has been fixed.
+
+
2.18.3 Additional Features and Functionality
+
+
Performance of Argon2 has been improved.
+
Performance of Noekeon has been improved.
+
A setSessionKeyObfuscation() method has been added to PublicKeyKeyEncryptionMethodGenerator to allow turning off of session key obfuscation (default is on, method primarily to get around early version GPG issues with AES-128 keys).
+
Implemented 'safegcd' constant-time modular inversion (as well as a variable-time variant). It has replaced Fermat inversion in all our EC code, and BigInteger.modInverse in several other places, particularly signers. This improves side-channel protection, and also gives a significant performance boost.
+
Performance of custom binary ECC curves and Edwards Curves has been improved.
+
BCJSSE: New boolean system property 'org.bouncycastle.jsse.keyManager.checkEKU' allows to disable ExtendedKeyUsage restrictions when selecting credentials (although the peer may still complain).
+
Initial support has been added for "Composite Keys and Signatures For Use In Internet PKI" using the test OID. Please note there will be further refinements to this as the draft is standardised.
+
The BC EdDSA signature API now supports keys implementing all methods on the EdECKey and XECKey interfaces directly.
+
Work has begun on classes to support the ETSI TS 103 097, Intelligent Transport Systems (ITS) in the bcpkix package.
+
Further optimization work has been done on GCM.
+
A NewHope based processor, similar to the one for Key Agreement has been added for trying to "quantum hard" KEM algorithms.
+
PGP clear signed signatures now support SHA-224.
+
Treating absent vs NULL as equivalent can now be configured by a system property. By default this is not enabled.
+
Mode name checks in Cipher strings should now make sure an improper mode name always results in a NoSuchAlgorithmException.
+
In line with changes in OpenSSL, the OpenSSLPBKDF now uses UTF-8 encoding.
+
+
2.18.4 Security Advisory
+
+
As described in CVE-2020-28052, the OpenBSDBCrypt.checkPassword() method had a flaw in it due to a change for BC 1.65. BC 1.66 is also affected. The issue is fixed in BC 1.67. If you are using OpenBSDBCrypt.checkPassword() and you are using BC 1.65 or BC 1.66 we strongly advise moving to BC 1.67 or later.
An encoding bug for rightEncoded() in KMAC has been fixed.
+
For a few values the cSHAKE implementation would add unnecessary pad bytes where the N and S strings produced encoded data that was block aligned. This has been fixed.
+
There were a few circumstances where Argon2BytesGenerator might hit an unexpected null. These have been removed.
+
+
2.19.3 Additional Features and Functionality
+
+
The qTESLA signature algorithm has been updated to v2.8 (20191108).
+
BCJSSE: Client-side OCSP stapling now supports status_request_v2 extension.
+
Support has been added for PKIXRevocationChecker for users of Java 8 and later.
+
Support has been added for "ocsp.enable", "ocsp.responderURL" for users of Java 8 and later.
+
Support has been added for "org.bouncycastle.x509.enableCRLDP" to the PKIX validator.
+
BCJSSE: Now supports system property 'jsse.enableFFDHE'
+
BCJSSE: Now supports system properties 'jdk.tls.client.SignatureSchemes' and 'jdk.tls.server.SignatureSchemes'.
+
Multi-release support has been added for Java 11 XECKeys.
+
Multi-release support has been added for Java 15 EdECKeys.
+
The MiscPEMGenerator will now output general PrivateKeyInfo structures.
+
A new property "org.bouncycastle.pkcs8.v1_info_only" has been added to make the provider only produce version 1 PKCS8 PrivateKeyInfo structures.
+
The PKIX CertPathBuilder will now take the target certificate from the target constraints if a specific certificate is given to the selector.
+
BCJSSE: A range of ARIA and CAMELLIA cipher suites added to supported list.
+
BCJSSE: Now supports the PSS signature schemes from RFC 8446 (TLS 1.2 onwards).
+
Performance of the Base64 encoder has been improved.
+
The PGPPublicKey class will now include direct key sigantures when checking for key expiry times.
+
+
2.19.4 Notes
+
+The qTESLA update breaks compatibility with previous versions. Private keys now include a hash of the public key at the end, and signatures are no longer interoperable with previous versions.
+
DLExternal would encode using DER encoding for tagged SETs. This has been fixed.
+
ChaCha20Poly1305 could fail for large (>~2GB) files. This has been fixed.
+
ChaCha20Poly1305 could fail for small updates when used via the provider. This has been fixed.
+
Properties.getPropertyValue could ignore system property when other local overrides set. This has been fixed.
+
The entropy gathering thread was not running in daemon mode, meaning there could be a delay in an application shutting down due to it. This has been fixed.
+
A recent change in Java 11 could cause an exception with the BC Provider's implementation of PSS. This has been fixed.
+
BCJSSE: TrustManager now tolerates having no trusted certificates.
+
BCJSSE: Choice of credentials and signing algorithm now respect the peer's signature_algorithms extension properly.
+
BCJSSE: KeyManager for KeyStoreBuilderParameters no longer leaks memory.
+
+
2.20.3 Additional Features and Functionality
+
+
LMS and HSS (RFC 8554) support has been added to the low level library and the PQC provider.
+
SipHash128 support has been added to the low level library and the JCE provider.
+
BCJSSE: BC API now supports explicitly specifying the session to resume.
+
BCJSSE: Ed25519, Ed448 are now supported when TLS 1.2 or higher is negotiated (except in FIPS mode).
+
BCJSSE: Added support for extended_master_secret system properties: jdk.tls.allowLegacyMasterSecret, jdk.tls.allowLegacyResumption, jdk.tls.useExtendedMasterSecret .
+
BCJSSE: KeyManager and TrustManager now check algorithm constraints for keys and certificate chains.
+
BCJSSE: KeyManager selection of server credentials now prefers matching SNI hostname (if any).
+
BCJSSE: KeyManager may now fallback to imperfect credentials (expired, SNI mismatch).
+
BCJSSE: Client-side OCSP stapling support (beta version: via status_request extension only, provides jdk.tls.client.enableStatusRequestExtension, and requires CertPathBuilder support).
+
TLS: DSA in JcaTlsCrypto now falls back to stream signing to work around NoneWithDSA limitations in default provider.
OpenSSH: Fixed padding in generated Ed25519 private keys.
+
Validation of headers in PemReader now looks for tailing dashes in header.
+
PKIXNameConstraintValidator was throwing a NullPointerException on OtherName. This has been fixed.
+
Some compatibility issues around the signature encryption algorithm field in CMS SignedData and the GOST algorithms have been addressed.
+
GOST3410-2012-512 now uses the GOST3411-2012-256 as its KDF digest.
+
+
2.21.3 Additional Features and Functionality
+
+
PKCS12: key stores containing only certificates can now be created without the need to provide passwords.
+
BCJSSE: Initial support for AlgorithmConstraints; protocol versions and cipher suites.
+
BCJSSE: Initial support for 'jdk.tls.disabledAlgorithms'; protocol versions and cipher suites.
+
BCJSSE: Add SecurityManager check to access session context.
+
BCJSSE: Improved SunJSSE compatibility of the NULL_SESSION.
+
BCJSSE: SSLContext algorithms updated for SunJSSE compatibility (default enabled protocols).
+
The digest functions Haraka-256 and Haraka-512 have been added to the provider and the light-weight API
+
XMSS/XMSS^MT key management now allows for allocating subsets of the private key space using the extraKeyShard() method. Use of StateAwareSignature is now deprecated.
+
Support for Java 11's NamedParameterSpec class has been added (using reflection) to the EC and EdEC KeyPairGenerator implementations.
+
+
+
2.21.4 Removed Features and Functionality
+
+
Deprecated ECPoint 'withCompression' tracking has been removed.
+
+
+
2.21.5 Security Advisory
+
+
A change to the ASN.1 parser in 1.63 introduced a regression that can cause an OutOfMemoryError to occur on parsing ASN.1 data. We recommend upgrading to 1.64, particularly where an application might be parsing untrusted ASN.1 data from third parties.
The ASN.1 parser would throw a large object exception for some objects which could be safely parsed. This has been fixed.
+
GOST3412-2015 CTR mode was unusable at the JCE level. This has been fixed.
+
The DSTU MACs were failing to reset fully on doFinal(). This has been fixed.
+
The DSTU MACs would throw an exception if the key was a multiple of the size as the MAC's underlying buffer size. This has been fixed.
+
EdEC and QTESLA were not previously usable with the post Java 9 module structure. This is now fixed.
+
ECNR was not correctly bounds checking the input and could produce invalid signatures. This is now fixed.
+
ASN.1: Enforce no leading zeroes in OID branches (longer than 1 character).
+
TLS: Fix X448 support in JcaTlsCrypto.
+
Fixed field reduction for secp128r1 custom curve.
+
Fixed unsigned multiplications in X448 field squaring.
+
Some issues over subset Name Constraint validation in the CertPath analyser have now been fixed.
+
TimeStampResponse.getEncoded() could throw an exception if the TimeStampToken was null. This has been fixed.
+
Unnecessary memory usage in the ARGON2 implementation has been removed.
+
Param-Z in the GOST-28147 algorithm was not resolving correctly. This has been fixed.
+
It is now possible to specify different S-Box parameters for the GOST 28147-89 MAC.
+
+
+
2.22.3 Additional Features and Functionality
+
+
QTESLA is now updated with the round 2 changes. Note: the security catergories, and in some cases key generation and signatures, have changed. For people interested in comparison, the round 1 version is now moved to org.bouncycastle.pqc.crypto.qteslarnd1 - this package will be deleted in 1.64. Please keep in mind that QTESLA may continue to evolve.
+
Support has been added for generating Ed25519/Ed448 signed certificates.
+
A method for recovering the message/digest value from an ECNR signature has been added.
+
Support for the ZUC-128 and ZUC-256 ciphers and MACs has been added to the provider and the lightweight API.
+
Support has been added for ChaCha20-Poly1305 AEAD mode from RFC 7539.
+
Improved performance for multiple ECDSA verifications using same public key.
+
Support for PBKDF2withHmacSM3 has been added to the BC provider.
+
The S/MIME API has been fixed to avoid unnecessary delays due to DNS resolution of a hosts name in internal MimeMessage preparation.
+
The valid path for EST services has been updated to cope with the characters used in the Aruba clearpass EST implementation.
Base64/UrlBase64 would throw an exception on a zero length string. This has been fixed.
+
Base64/UrlBase64 would throw an exception if there was whitespace in the last 4 characters. This has been fixed.
+
The SM2 Signature JCE class now properly resets of Signature.sign() is called.
+
XMSS applies further validation to deserialisation of the BDS tree so that failure occurs as soon as tampering is detected (see CVE below).
+
An off by one error in the JsseDefaultHostnameAuthorizer isValidNameMatch method has been fixed.
+
BCJSSE: Return empty byte array instead of null, for the null session ID.
+
If a checksum calculator was passed to a PGPSecretKey constructor, but the encryptor was set to null, the wrong checksum would be calculated for the S2K usage. This has been fixed.
+
The CRMF EncryptedValue, when containing a private key, held an encoding of an EncryptedPrivateKeyInfo, rather than just the encrypted bytes. This has been fixed.
+
EC point precomputations could fail due to race conditions in concurrent settings. Point precomputation was reworked to fix this.
+
PGP key rings containing EdDSA signatures would cause an exception on parsing. This has been fixed.
+
BCJSSE: a mixed case error for brainpool curves in the supported groups set has been fixed.
+
getVersion() on the CRMF CertTemplate class could cause a null pointer exception if the optional version field was left out. This has been fixed.
+
Use of a short buffer with RSA via the JCE could result in an escaping ArrayIndexOutOfBoundsException. This has been fixed so that a ShortBufferException is now thrown.
+
SM2Engine.decrypt() ignored the offset parameter and assumed zero. This has been fixed.
+
A PEM encoded TRUSTED CERTIFICATE missing a trust block would result in a NullPointerException. This has been fixed.
+
If the Sun provider was removed entirely the BC SecureRandom was unable to seed and caused an InstantiationException. A back up seeding strategy has been added to prevent this.
+
In some situations the use of sm2p256v1 would result in "unknown curve name". This has been fixed.
+
CMP PollReqContent now supports multiple certificate request IDs.
+
+
2.25.3 Additional Features and Functionality
+
+
TLS: Extended CBC padding is now optional (and disabled by default).
+
TLS: Now supports channel binding 'tls-server-end-point'.
+
TLS: InterruptedIOException (e.g. socket timeout) during app-data reads no longer fails connection; handshake is optionally resumable after IIOE using 'TlsProtocol.setResumableHandshake()'.
+
TLS: Added utility methods and constants for ALPN (RFC 7301).
+
BCJSSE: Now supports system property 'jdk.tls.client.protocols'
+
BCJSSE: Now supports SSLParameters.setSNIMatchers.
+
BCJSSE: SNI can now be used in earlier JDKs via BC extensions.
+
BCJSSE: Session context now holds sessions via soft references.
+
An implementation of CryptoServicesRegistrar has been added to allow configuring of DSA/DH parameters and global setting of the SecureRandom used in the APIs.
+
Support has been added for the Unified Model of key agreement for both regular Diffie-Hellman and ECCDH.
+
Standard key-wrapping ciphers can now be used for wrapping other data where the cipher supports it.
+
BCFKS can now support the use of generalised wrapping algorithms.
+
A parser has now been added for the GNU keybox file format.
+
The GPG SExpr parser now covers a wider range of key types and validates associated checksums as well.
+
PGP EC operations now support more than just NIST curves.
+
Restrictions on the output sizes of the Blake2b/s digests in the lightweight API have been removed.
+
The Whirlpool digest OID has been added to its corresponding mappings for the JCA.
+
Support has been added for SHA-3 based signatures to the CMS API.
+
Support has been added to the CMS API for the generation of ECGOST key transport messages.
+
The ECElGamalEncryptor now supports the use of ECGOST curves.
+
The number of signature subpackets in OpenPGP signatures that are converted into explicit types automatically has been increased.
+
RFC 8032: Added low-level implementations of Ed25519 and Ed448.
+
The provider jars now include a services entry for the 2 providers they hold.
+
Support has been added for the German BSI KAEG Elliptic Curve key agreement algorithm with X9.63 as the KDF to the JCE.
+
Support has been added for the German BSI KAEG Elliptic Curve session key KDF to the lightweight API.
+
+
2.25.4 Security Related Changes and CVE's Addressed by this Release
+
+
CVE-2018-1000180: issue around primality tests for RSA key pair generation if done using only the low-level API.
+
CVE-2018-1000613: lack of class checking in deserialization of XMSS/XMSS^MT private keys with BDS state information.
Issues with using PQC based keys with the provided BC KeyStores have now been fixed.
+
ECGOST-2012 public keys were being encoded with the wrong OID for the digest parameter in the algorithm parameter set. This has been fixed.
+
SM3 has now been added as an acceptable algorithm for TSP timestamps.
+
SM2 signatures were using the wrong default identity value. This has now been fixed.
+
An edge condition in Blake2b for hashes on data with a length in the range of 2**64 - 127 to 2**64 has been identifed and fixed.
+
The ISO Trailer for SHA512/256 used in X9.31 and ISO9796-2 signatures was incorrect. This has been fixed.
+
The BCJSSE SSLEngine implementation now correctly wraps/unwraps application data only in whole records.
+
The curve parameters for tc26_gost_3410_12_256_paramSetA were incorrect. These have been fixed.
+
Further work has been done to try and prevent escaping exceptions on opening random files as BCFKS files or PKCS#12 files.
+
An off-by-one error for the max N check for SCRYPT has been fixed. SCRYPT should now be compliant with RFC 7914.
+
ASN1GeneralizedTime will now accept a broader range of input strings.
+
+
2.26.3 Additional Features and Functionality
+
+
GOST3410-94 private keys encoded using ASN.1 INTEGER are now accepted in private key info objects.
+
SCRYPT is now supported as a SecretKeyFactory in the provider and in the PKCS8 APIs
+
The BCJSSE provider now supports session resumption in clients.
+
The BCJSSE provider now supports Server Name Indication.
+
The BCJSSE provider now supports the jdk.tls.namedGroups system property.
+
The BCJSSE provider now supports the org.bouncycastle.jsse.ec.disableChar2 system property, which optionally disables the use of characteristic-2 elliptic curves.
+
EC key generation and signing now use cache-timing resistant table lookups.
+
Performance of the DSTU algorithms has been greatly improved.
+
Support has been added for generating certificates and signatures in the PKIX API using SHA-3 based digests.
+
Further work has been done on improving SHA-3 performance.
+
The organizationIdentifier (2.5.4.97) attribute has been added to BCStyle.
+
GOST3412-2015 has been added to the JCE provider and the lightweight API.
+
The Blake2s message digest has been added to the provider and the lightweight API.
+
Unified Cofactor Diffie-Hellman (ECCDHU) is now supported for EC in the JCE and the lightweight API.
+
A DEROtherInfo generator for key agreement using NewHope as the source of the shared private info has been added that can be used in conjunction with regular key agreement algorithms.
+
RFC 7748: Added low-level implementations of X25519 and X448.
+
+
2.26.4 Security Related Changes and CVE's Addressed by this Release
+
+
CVE-2017-13098 ("ROBOT"), a Bleichenbacher oracle in TLS when RSA key exchange is negotiated. This potentially affected BCJSSE servers and any other TLS servers configured to use JCE for the underlying crypto - note the two TLS implementations using the BC lightweight APIs are not affected by this.
NewHope and SPHINCS keys are now correctly created off certificates by the BC provider.
+
Use of the seeded constructor with SecureRandom() and the BC provider in first position could cause a stack overflow error. This has been fixed.
+
The boolean flag on ECDSAPublicKey in CVCertficate was hard coded. This has been fixed.
+
An edge condition in IV processing for GOFB mode has been found and fixed.
+
ANSSI named EC curves were not being recognised in PKCS#10 and certificate parsing. This has been fixed.
+
BaseStreamCipher.engineSetMode() could sometimes throw an IllegalArgumentException rather than a NoSuchAlgorithmException. This has been fixed.
+
Some class resolving used by the provider would fail if the BC jar was loaded on the boot class path. This has been fixed.
+
An off-by-one range check in SM2Signer has been fixed.
+
Retrieving an SM2 key from a certificate could result in a NullPointerException due to a problem with the curve lookup. This has been fixed.
+
A race condition that could occur inside the HybridSecureRandom on reseed and result in an exception has been fixed.
+
DTLS now supports records containing multiple handshake messages.
+
+
2.27.3 Additional Features and Functionality
+
+
An implementation of GOST3410-2012 has been added to light weight API and the JCA provider.
+
Support for ECDH GOST3410-2012 and GOST3410-2001 have been added. The CMS API can also handle reading ECDH GOST3410 key transport messages.
+
Additional mappings have been added for a range of CVC-ECDSA algorithms.
+
XMMS and XMSSMT are now available via the BCPQC provider. Support has been added for using these keys in certificates as well.
+
Support has been added for DSTU-7564 message digest and the DSTU-7624 ciphers, together with their associated modes.
+
A new system property org.bouncycastle.asn1.allow_unsafe_integer has been added to allow parsing of malformed ASN.1 integers in a similar fashion to what BC 1.56 did. The default behavior remains as reject malformed integers.
+
SignedMailValidator would only pick up the first email address in a DN, even when there was more than one. This has been fixed.
+
PEMParser will now support a broader range of PBKDFs in encrypted private key files.
+
Work has been done on speeding up the SHA-3 family. The functions are now 3 to 4 times faster.
+
Some EC aliases in the provider had no corresponding implementations. These have been cleaned up.
+
TimeStampResponses now support definite-length encoding to allow the preservation of order in certificates sets for legacy responses.
+
The TSP API now supports SM2withSM3.
+
The BCJSSE provider now has a FIPS mode.
+
The BCJSSE provider now supports layered sockets.
+
The new TLS API now has protocol/API support for the status_request extension (OCSP stapling).
+
The new TLS API now supports RFC 7633 - X.509v3 TLS Feature Extension (e.g. "must staple"), enabled in default clients.
+
TLS exceptions have been made more directly informative.
+
+
2.27.4 Removed Features and Functionality
+
+
Per RFC 7465, removed support for RC4 in the new TLS API.
+
Per RFC 7568, removed support for SSLv3 in the new TLS API.
A class cast exception for master certification removal in PGPPublicKey.removeCertification() by certification has been fixed.
+
GOST GOFB 28147-89 mode had an edge condition concerning the incorrect calculation of N4 (see section 6.1 of RFC 5830) affecting about 1% of IVs. This has been fixed.
+
The X.509 PolicyConstraints class was using implicit rather than explicit tagging for the SkipCerts field. This has been fixed.
+
Key expiration in the OpenPGP is now calculated for ambiguous self signatures using the most recently created self-signature, in line with GPG and the recommendation in RFC 4880.
+
Multiple validity periods in PGP keys were resolved in an adhoc fashion, in line with GPG's approach the PGP has been changed to return the most recent validity period signed.
+
An occasional class cast exception that could occur with nested multi-parts in the S/MIME API has been fixed.
+
A couple of bogus aliases associated AlgorithmParameters that did not resolve in the provider have been removed.
+
The CMS API will now correctly verify PSS signatures with odd length salts.
+
Choosing an invalid mode on a stream cipher in the JCE could result in an IllegalArgumentException. This has now been corrected to throw a NoSuchAlgorithmException.
+
Optional parameters for ECDSA public keys in CVCertificates were hard coded to non-optional. This has been fixed.
+
Passing a PKCS12 key to a Mac in the BC JCE always resulted in SHA-1 being used to process the password regardless of the underlying MAC algorithm. This has been fixed. An unrecognised HMAC will also now result in an exception.
+
The Base64 encoder now explicitly validates 2 character padding as being "==".
+
EC FixedPointCombMultiplier avoids 'infinity' point in lookup tables, reducing timing side-channels.
+
Reuse of a Blake2b digest with a call to reset() rather than doFinal() could result in incorrect padding being introduced and the wrong digest result produced. This has been fixed.
+
+
2.28.3 Additional Features and Functionality
+
+
ARIA (RFC 5794) is now supported by the provider and the lightweight API.
+
ARIA Key Wrapping (RFC 5649 style) is now supported by the provider and the lightweight API.
+
SM2 signatures, key exchange, and public key encryption has been added to the lightweight API.
+
XMSS has been added to the lightweight PQ API. Note: this should be treated as beta code.
+
API support for client side EST (RFC 7030), as well as some CMC (RFC 5273) has been added to the PKIX API. A full set of ASN.1 classes for both protocols has been added as well.
+
A test client for EST which will interop with the 7030 test server at http://testrfc7030.com/ has been added to the general test module in the current source tree.
+
The BCJSSE provider now supports SSLContext.getDefault(), with very similar behaviour to the SunJSSE provider, including checks of the relevant javax.net.ssl.* system properties and auto-loading of jssecacerts or cacerts as the default trust store.
+
+
2.28.4 Security Related Changes
+
+
The default parameter sizes for DH and DSA are now 2048. If you have been relying on key pair generation without passing in parameters generated keys will now be larger.
+
Further work has been done on preventing accidental re-use of a GCM cipher without first changing its key or iv.
Using unknown status with the ASN.1 CertStatus primitive could result in an IllegalArgumentException on construction. This has been fixed.
+
A potentional NullPointerException in a precomputation in WNafUtil has been removed.
+
PGPUtil.getDecoderStream() would throw something other than an IOException for empty and very small data. This has been fixed.
+
+
2.29.3 Additional Features and Functionality
+
+
Support for the explicit setting of AlgorithmParameters has been added to the JceCMSContentEncryptorBuilder and the JceCMSMacCaculatorBuilder classes to allow configuration of the session cipher/MAC used.
+
EC, ECGOST3410, and DSTU4145 Public keys are now validated on construction in the JCA/JCE and the light weight API.
+
DSA Public keys are now validated on construction in the JCA/JCE and the light weight API.
+
Diffie-Hellman public keys are now validated where parameters allow it.
+
Some validations are now applied to RSA moduli and public exponents.
+
The ASN.1 Object Identifier cache now uses a Concurrent HashMap for additional speed.
+
AES-CCM MAC support has been added to the provider.
+
Support for ChaCha7539 (ChaCha20 as defined in RFC 7539) and Poly1305 have been added to the provider.
+
Support has been added for defining your own curves and making them available to the key generators and factories.
+
Methods have been added for specifying that a PGPPublicKey/PGPPublicKeyRing is being encoded for export and trust packets are not required.
+
Plain-ECDSA and SHA-3 support has been added to DefaultDigestAlgorithmIdentifierFinder.
+
SHA-3 support has been added to BcDefaultDigestProvider.
+
A higher level TLS API and JSSE provider have been added to the project.
It is now possible to configure the provider to only import keys for specific named curves.
+
Work has been done to improve the "constant time" behaviour of the RSA padding mechanisms.
+
The GCM ciphers in the JCE and lightweight API will now fail if an attempt is made to use them for encryption after a doFinal or without changing the IV.
+
The constructor for IESParameterSpec that allows the use of cipher without a nonce has been deleted. See also details for CVE-2016-1000344, CVE-2016-1000352.
+
Strict encoding enforcement has been introduced for ASN1Integer.
+
CVE-2016-1000338: DSA does not fully validate ASN.1 encoding of signature on verification. It is possible to inject extra elements in the sequence making up the signature and still have it validate, which in some cases may allow the introduction of "invisible" data into a signed structure.
+
CVE-2016-1000339: AESFastEngine has a side channel leak if table accesses can be observed. The use of lookup large static lookup tables in AESFastEngine means that where data accesses by the CPU can be observed, it is possible to gain information about the key used to initialize the cipher. We now recommend not using AESFastEngine where this might be a concern. The BC provider is now using AESEngine by default.
+
CVE-2016-1000340: Static ECDH vulnerable to carry propagation bug.
+Carry propagation bugs in the implementation of squaring for several raw math classes have been fixed (org.bouncycastle.math.raw.Nat???). These classes are used by our custom elliptic curve implementations (org.bouncycastle.math.ec.custom.**), so there was the possibility of rare (in general usage) spurious calculations for elliptic curve scalar multiplications. Such errors would have been detected with high probability by the output validation for our scalar multipliers.
+
CVE-2016-1000341: DSA signature generation vulnerable to timing attack. Where timings can be closely observed for the generation of signatures, the lack of blinding in 1.55 or earlier, may allow an attacker to gain information about the signatures k value and ultimately the private value as well.
+
CVE-2016-1000342: ECDSA does not fully validate ASN.1 encoding of signature on verification. It is possible to inject extra elements in the sequence making up the signature and still have it validate, which in some cases may allow the introduction of "invisible" data into a signed structure.
+
CVE-2016-1000343: DSA key pair generator generates a weak private key if used with default values. If the JCA key pair generator is not explicitly initialised with DSA parameters, 1.55 and earlier generates a private value assuming a 1024 bit key size. In earlier releases this can be dealt with by explicitly passing parameters to the key pair generator.
+
CVE-2016-1000344: DHIES allows the use of unsafe ECB mode. This algorithm is now removed from the provider.
+
CVE-2016-1000345: DHIES/ECIES CBC mode vulnerable to padding oracle attack. For BC 1.55 and older, in an environment where timings can be easily observed, it is possible with enough observations to identify when the decryption is failing due to padding.
+
CVE-2016-1000346: Other party DH public key not fully validated. This can cause issues as invalid keys can be used to reveal details about the other party's private key where static Diffie-Hellman is in use. As of this release the key parameters are checked on agreement calculation.
+
CVE-2016-1000352: ECIES allows the use of unsafe ECB mode. This algorithm is now removed from the provider.
+
+
2.29.5 Security Advisory
+
+
We consider the carry propagation bugs fixed in this release to have been exploitable in previous releases (1.51-1.55), for static ECDH, to reveal the long-term key, per "Practical realisation and elimination of an ECC-related software bug attack", Brumley et.al.. The most common case of this would be the non-ephemeral ECDH ciphersuites in TLS. These are not enabled by default in our TLS implementations, but they can be enabled explicitly by users. We recommend that users DO NOT enable static ECDH ciphersuites for TLS.
Issues with cloning of blake digests with salts and personalisation strings have been fixed.
+
The JceAsymmetricValueDecryptor in the CRMF package now attempts to recognise a wider range of parameters for the key wrapping algorithm, rather than relying on a default.
+
GCM now fails if an attempt is made to go past 2^32-1 blocks.
+
(r, k) ordering for Poly1305 has been modified to be brought into line with RFC 7539.
+
An occasional error in Poly1305 due to sign-extension has been fixed.
+
TimeStampRequest was always failing to validate if extensions were present. This has been fixed.
+
ECIES/IES algorithm parameters encoding failed on default parameters. This has been fixed.
+
PGPObjectFactory.iterator() could fail when called on data with multiple stream packets. This has been fixed.
+
The McEliece implementation in the BCPQC provider has been revised and now has working key factories associated with it.
+
The X.509 UserNotice class can now cope with empty sequences.
+
Creation of multiple providers concurrently could cause issues with a non-synchronized Map in the provider. Code is now synchronized.
+
If the lightweight OAEP encoder is fed oversized input it will now throw something more informative than an ArrayOutOfBoundsException or simply truncate.
+
Attempting to use the PasswordRecipientInfoGenerator without explicitly setting the salt would cause a NullPointerException. This has been fixed.
+
The BasicConstraintsValidation in the CertPath API would throw a NullPointerException on an unconstrained path length. This has been fixed.
+
A shift error for > 24 bit numbers in TlsUtils has been fixed.
+
OAEP encryption for a zero length message would create invalid cipher text. This has been fixed.
+
Trying to use of non-default parameters for OAEP in CRMF would resort to the default parameter set. This has been fixed.
+
If the BC provider was not registered, creating a CertificateFactory would cause a new provider object to be created. This has been fixed.
+
+
2.30.3 Additional Features and Functionality
+
+
The DANE API has been updated to reflect the latest standard changes.
+
The signature algorithm SPHINCS-256 has been added to the post-quantum provider (BCPQC). Support is in place for SHA-512 and SHA3-512 (using trees based around SHA512_256 and SHA3_256 respectively).
+
The key exchange algorithm NewHope has been added to the post-quantum provider (BCPQC). Support is in place for the regular configuration using SHA3-256 as the flattening algorithm for the agreed value.
+
The CMS password recipient generator now allows the PRF to be changed to something other than SHA-1
+
Direct support for the SignatureTarget packet has been added to the OpenPGP API.
+
TLS: support for ClientHello Padding Extension (RFC 7685).
+
TLS: support for ECDH_anon key exchange.
+
Support has been added for HMAC SHA-3. Aliases have been added for NIST OIDs for SHA-3 HMAC as well.
+
Support has been added for SHA-3 in DSA, ECDSA, DDSA, and ECDDSA. Aliases have been added for NIST OIDs for DSA and ECDSA as well.
+
Support has been added for SHA-3 with RSA PKCS 1.5, PSS, and OAEP.
+
Support has been added for GOST R 34.11-2012 to the provider and the lightweight API.
+
PGP armored output can now be generated without a version string.
+
The TimeStampTokenGenerator will now generate timestamps down to a millisecond resolution.
+
Additional search methods have been added to PGP public and secret key rings.
Blake2b-160, Blake2b-256, Blake2b-384, and Blake2b-512 are now actually in the provider and an issue with cloning Blake2b digests has been fixed.
+
PKCS#5 Scheme 2 using DESede CBC is now supported by the PKCS#12 implementation.
+
The IES engine would sometimes throw a "too short" exception on small messages which were the right length. This has been fixed.
+
Cipher.getOutputSize() for IES ciphers would throw a ClassCastException. This has been fixed.
+
It turns out, after advice one way and another that the NESSIE test vectors for Serpent are now what should be followed and that the vectors in the AES submission are regarded as an algorithm called Tnepres. The Serpent version now follows the NESSIE vectors, and the Tnepres cipher has been added to the provider and the lightweight API for compatibility.
+
Problems with DTLS record-layer version handling were resolved, making version negotiation work properly.
+
+
2.31.3 Additional Features and Functionality
+
+
Camellia and SEED key wrapping are now supported for CMS key agreement
+
The BC TLS/DTLS code now includes a non-blocking API.
+
CTR/SIC mode now support an internal counter. The internal counter can be turned on by passing an IV smaller than the block size of the cipher's algorithm.
+
The lightweight CMS API operators now support CAST5 and RC2 CBC encryption.
+
The CMS API now supports Diffie-Hellman as specified in RFC 3370.
+
Support has been added to the CMS API for PKCS#7 ANY type encapsulated content where the encapsulated content is not an OCTET STRING.
+
PSSSigner in the lightweight API now supports fixed salts.
+
+
2.31.4 Security Advisory
+
+
(D)TLS 1.2: Motivated by CVE-2015-7575, we have added validation that the signature algorithm received in DigitallySigned structures is actually one of those offered (in signature_algorithms extension or CertificateRequest). With our default TLS configuration, we do not believe there is an exploitable vulnerability in any earlier releases. Users that are customizing the signature_algorithms extension, or running a server supporting client authentication, are advised to double-check that they are not offering any signature algorithms involving MD5.
+
+
2.31.5 Notes
+
+If you have been using Serpent, you will need to either change to Tnepres, or take into account the fact that Serpent is now byte-swapped compared to what it was before.
+
The BC JCE cipher implementations could sometimes fail when used in conjunction with the JSSE and NIO. This has been fixed.
+
PGPPublicKey.getBitStrength() always returned 0 for EC keys. This has been fixed.
+
A PKCS12 key store containing a looping certificate chain could cause an OutOfMemoryException. This has been fixed.
+
A change in JDK 1.8 meant that X509Certificate.verify(PublicKey, Provider) would cause a stack overflow. This has been fixed.
+
Nested multiparts with irregular post-amble could cause verification issues for the SMIMESigned classes. This has been fixed.
+
CMSSignedData now supports verification of signed attributes where the calculated digest uses a different algorithm from the digest used in the signature.
+
TRUSTED CERTIFICATE parsing in PEM files was ignoring the attribute block. A new class X509TrustedCertificateBlock is now returned containing both the certificate and the trust information.
+
Adding a password to a PGP key which did not previously have one would result in an improperly formatted key. This has been fixed.
+
ECIES/IES was only using a 4 byte label length for the MAC tag when it should have been an 8 byte one. This has now been fixed and OldECIES/OldIES has been added for backwards compatibility.
+
The JceCRMFEncryptorBuilder was not recognising key size specific object identifiers properly. This has been fixed.
+
The OpenPGP ClearSignedFileProcessor would not handle verification of single line files properly. This has been fixed.
+
The BC X509Certificate class was no longer in agreement with the standard class for hashCode(). The BC X509Certificate class will now track the changes made in the standard Java distribution.
+
PGP signature hashed sub-packets with long length encodings would fail to validate on signature checking. This has been fixed.
+
The S/MIME API would occasionally leak InputStreams which could cause issues with custom DataSource implementations. This has been fixed.
+
The PKCS#12 KeyStore implementation would sometimes leave orphaned chain certificates in the key store after private key deletion. This has been fixed.
+
A bug in the DirectKeySignature OpenPGP example which could lead to extra data appearing in the signature has been fixed.
+
Explicit configuration of a BcAsymmetricKeyWrapper with a SecureRandom was not properly propagated internally. This has been fixed.
+
A CRL with a null certificate issuer would sometimes result in a NullPointerException during CertPathProcessing. This has been fixed.
+
The CertPath processor would occasionally fail to match a DistributionPoint name correctly. This has been fixed.
+
In order to avoid confusion about thread safety, BCrypt now uses a new instance for hash calculation every time it is invoked.
+
Some decidedly odd argument casting in the PKIXCertPathValidator has been fixed to throw an InvalidAlgorithmParameterException.
+
Presenting an empty array of certificates to the PKIXCertPathValidator would cause an IndexOutOfRangeException instead of a CertPathValidatorException. This has been fixed.
+
+
2.32.3 Additional Features and Functionality
+
+
It is now possible to specify that an unwrapped key must be usable by a software provider in the asymmetric unwrappers for CMS.
+
A Blake2b implementation has been added to the provider and lightweight API.
+
SHA3 has now been added to the provider and the lightweight API. SHAKE128 and SHAKE256 have also been added to the lightweight API. The original implementation of the draft standard has been renamed to Keccak.
+
The CMS API now supports RFC 6211 for both SignedData and AuthenticatedData.
+
The ASN.1 parser for ECGOST private keys will now parse keys encoded with a private value represented as an ASN.1 INTEGER.
+
EAX mode and CMAC is now supported for ciphers such as SHACAL-2 and Threefish.
+
The SM4 block cipher has been added to the provider and the lightweight API.
+
X9.31, ISO9796/2, and PSS signature support has been added for SHA512/224, SHA512/256.
+
SubjectPublicKeyInfoFactory now supports DSA parameters.
+
A range of new algorithms are now support for EC key agreement.
+
EC ContentSigners and EC ContentVerifiers have been added to the lightweight operator package in the PKIX APIs.
+
The PKCS#12 key store will now garbage collect orphaned certificates on saving.
+
Caching for ASN.1 ObjectIdentifiers has been rewritten to make use of an intern method. The "usual suspects" are now interned automatically, and the cache is used by the parser. Other OIDs can be added to the cache by calling ASN1ObjectIdentifier.intern().
+
+
2.32.4 Notes
+
+It turns out there was a similar, but different, issue in Crypto++ to the BC issue with ECIES. Crypto++ 6.0 now offers a corrected version of ECIES which is compatible with that which is now in BC.
+
GenericSigner in the lightweight API would fail if the digest started with a zero byte, occasionally causing a TLS negotiation to fail. This has been fixed.
+
Some BC internal classes expected the BC provider to be accessible within the provider. This has been fixed.
+
Email based policy constraints in CertPath validation did not include '@'domain.name as a possible match. This has been fixed.
+
The Shacal2Engine would throw an ArrayIndexOutOfBoundsException if presented with input longer than a block size. This has been fixed.
+
Using PKCS5/PKCS7 with pad values greater than 127 would result in an exception on decryption. This has been fixed.
+
EC private key values could encode to an OCTET STRING which was shorter than that described in RFC 5915/SEC 1. This has been fixed.
+
Providing multiple trust anchors to the CertPath validator could cause a StackOverflowError on an invalid CertPath. This has been fixed.
+
TLS: bad-padding handling when encrypt-then-MAC enabled is now fixed.
+
ECDH KeyAgreement.init() was not properly honoring the JCE API in respect to non-null parameters. This has been fixed.
+
PKCS symmetric padding now takes into account pad lengths of more than 127 bytes.
+
Corrupted input to RFC5649WrapEngine could cause an out of memory error. This has been fixed.
+
OSGI import issues for bcmail have been fixed.
+
A badly formed issuer in a X.509 certificate could cause a null pointer exception in X509CertificateHolder.toString(). This has been fixed.
+
CMSSignedData.verifySignatures() could fail on a correct counter signature due to a mismatch of the SID. This has been fixed.
+
+
2.33.3 Additional Features and Functionality
+
+
The CMP support class CMPCertificate restricted the types of certificates that could be added. A more flexible method has been introduced to allow for other certificate types.
+
Support classes have be added for DNS-based Authentication of Named Entities (DANE) to the PKIX distribution.
+
Work has been done to reduce computation requirements for long skips associated with implementations of the SkippingCipher interface.
+
AES GCM mode is now supported by CMS EnvelopedData.
+
Iteration count is now settable in BcPKCS12MacCalculatorBuilder.
+
Support for BCrypt and it's OpenBSD variant has been added to the lightweight API.
+
It's now possible to specify the direction of the underlying cipher used for key wrapping with NIST/RFC3394 wrappers.
+
TLS: server-side support for DHE key exchange.
+
TLS: server-side support for PSK and SRP ciphersuites.
+
TLS: (EC)DSA now supports signatures with non-SHA1 digests.
+
TLS: support for ECDHE_ECDSA/AES/CCM ciphersuites from RFC 7251.
+
Cipher.getIV() now returns nonces for AEAD modes.
+
OIDs for dhPublicNumber and dhKeyAgreement are now supported by the provider.
+
OIDs for several signature types using the RIPEMD family of digests have been added to the provider.
+
JcaJceUtils.getDigestAlgName() has been added to assist in converting OIDs representing message digests into JCA algorithm names.
+
BasicOCSPResp.getSignatureAlgorithmID() has been added to allow algorithm indentifier details to be returned from a basic OCSP response.
+
Additional OIDs have been added for OCSP.
+
X509CRLObject.getSignAlgName() now attempts to return an actual name, rather than an OID for, for the signature algorithm.
+
SignedMailValidator now pays attention to the date in the PKIXParameters object if it is set.
+
A missing signing time in a signature no longer causes SignedMailValidator to fail a signature, but provide a warning instead.
+
An AlgorithmNameFinder implementation has been added to the PKIX API to provide "human friendly" translations of algorithm OIDs.
+
Support has been added for X9.31-1998 DRBG and X9.31-1998 RSA signatures to the lightweight API and the provider.
+
CertPath validator will now make use of the issuer key identifier and the issuer name if a key identifier is available for the issuer.
+
Support for some JDK1.5+ language features has finally made its way into the repository.
+
A load store parameter, PKCS12StoreParameter, has been added to support DER only encoding of PKCS12 key stores.
+
+
2.33.4 Security Advisory
+
+
The CTR DRBGs would not populate some bytes in the requested block of random bytes if the size of the block requested was not an exact multiple of the block size of the underlying cipher being used in the DRBG. If you are using the CTR DRBGs with "odd" keysizes, we strongly advise upgrading to this release, or contacting us for a work around.
The AEAD GCM AlgorithmParameters object was unable to return a GCMParameterSpec object. This has been fixed.
+
Cipher.getIV() was returning null for AEAD mode ciphers. This has been fixed.
+
CipherInputStream would fail for some AEAD mode ciphers if the message was over 4k in length. This has been fixed.
+
The JCE provider will now produce simple RSAPrivateKey objects where CRT coefficients are not provided.
+
PGP key signature certifications did not support DIRECT KEY signatures. This has been fixed.
+
User Attribute subpackets in PGP with long length encodings could result in certification verification failing. This has been fixed.
+
Calls to CommandMap.setDefaultCommandMap() in the SMIME API are now wrapped in doPrivileged() blocks to allow them to work with a security manager.
+
The encoding of the certificate_authorities field of a TLS CertificateRequest has been fixed.
+
EC point formats are now strictly enforced in the TLS API.
+
The provider implementation was failing to throw an exception if algorithm parameters were passed in when none were required for EC key agreement. This has been fixed.
+
PKCS#12 files containing keys/certificates with empty attribute sets attached to them no longer cause an ArrayIndexOutOfBoundsException to be thrown.
+
Issues with certificate verification and server side DTLS/TLS 1.2 have now been fixed.
+
+
2.34.3 Additional Features and Functionality
+
+
The range of key algorithm names that will be interpreted by KeyAgreement.generateSecret() has been expanded for ECDH derived algorithms in the provider. A KeyAgreement of ECDHwithSHA1KDF can now be explicitly created.
+
ECIES now supports the use of IVs with the underlying block cipher and CBC mode in both the lightweight and the JCE APIs.
+
Support has been add for RFC5649 key wrapping using AES.
+
The PGP API now allows access and handling of User IDs as raw byte arrays, to deal with keyrings not using UTF-8.
+
The PGP API now provides automatic conversion of embedded signatures in signature sub-packet vectors.
+
The PGP API now fully supports ECDH as outlined in RFC 6637.
+
GCM and GMAC now support tag lengths down to 32 bits.
+
Custom implementations for many of the SEC Fp curves have been added, resulting in drastically improved performance. The current list includes all secp***k1 and secp***r1 curves from 192 to 521 bits. They can be accessed via the org.bouncycastle.crypto.ec.CustomNamedCurves class and are generally selected by other internal APIs in place of the generic implementations.
+
Automatic EC point validation added, both for decoded inputs and multiplier outputs.
+
A SkippingCipher interface has been added for ciphers that can be moved into a specific state for a given byte address. The lightweight class StreamBlockCipher has been generalised to support any BlockCipher object that can support a streaming mode.
+
ASN.1 date/time objects now support the passing in of a Locale to allow for constructing the object using a Date interpreted from a different locale to the default for the JVM.
+
The range of Diffie-Hellman OIDs recognised by the provider has been extended.
+
Some utility methods for interpreting OIDs have been exposed in the JcaJceUtils class.
+
A method has been added to CMSSignedData for replacing the OCSP responses associated with a signed message.
+
Use of RC2/RC4 in the CMS is now provider independent.
+
TlsInputStream now provides a means of supporting InputStream.available().
+
Dependencies on the JCA have been removed from PGPObjectFactory.
+
Further work has been done on improving key quality with EC and DSA algorithms.
+
KDFCounterBytesGenerator now supports suffix and prefix fixed input data, as outlined in NIST SP 800-108.
+
Support has been added to allow retrieval and resetting the internal state of the SHA/SHA-2 digests in the lightweight API using an encoded format.
+
BSI plain ECDSA is now supported by the provider.
+
The provider now advertises RSA PSS signature implementations directly using the standard naming.
+
Full support is now provided for client-side auth in the D/TLS server code.
+
Compatibility issues with some OSGI containers have been addressed.
+
+
2.34.4 Notes
+
+
Support for NTRUSigner has been deprecated as the algorithm has been withdrawn.
+
Some changes have affected the return values of some methods. If you are migrating from an earlier release, it is recommended to recompile before using this release.
+
There has been further clean out of deprecated methods in this release. If your code has previously been flagged as using a deprecated method you may need to change it. The OpenPGP API is the most heavily affected.
The DualECSP800DRBG sometimes truncated the last block in the generated stream incorrectly. This has been fixed.
+
Keys produced from RSA certificates with specialised parameters would lose the parameter settings. This has been fixed.
+
OAEP parameters were being ignored on CMS key trans recipient processing. This has been fixed.
+
OpenPGP NotationData was restricting the name and value lengths to 255 characters and truncating silently. This has been fixed.
+
CTS mode is now in alignment with the errata for RFC 2040, as detailed in RFC 3962.
+
Occasionally the provider implementation of DH KeyAgreement would drop a leading zero byte off the start of the shared secret (see RFC 2631 2.1.2). This has been fixed.
+
RFC3394WrapEngine was ignoring the offset parameter inOff and using zero instead. This has been fixed.
+
GOST keys would not encode using the CryptoPro parameter set, even if it was available. This has been fixed.
+
The TimeStampRequest stream constructor was not setting the extensions field correctly. This has been fixed.
+
Default RC2 parameters for 40 bit RC2 keys in CMSEnvelopedData were encoding incorrectly. This has been fixed.
+
In case of a long hash the DSTU4145 implementation would sometimes remove one bit too much during truncation. This has been fixed.
+
+
2.35.3 Additional Features and Functionality
+
+
Additional work has been done on CMS recipient generation to simplify the generation of OAEP encrypted messages and allow for non-default parameters.
+
OCB implementation updated to account for changes in draft-irtf-cfrg-ocb-03.
+
RFC 6637 ECDSA and ECDH support has been added to the OpenPGP API.
+
Implementations of Threefish and Skein have been added to the provider and the lightweight API.
+
Implementations of the SM3 digest have been added to the provider and the lightweight API.
+
The 3 MAC based KDF generators in NIST SP 800-108 have been added to the lightweight API.
+
Support has been added for the GOST PKCS#5 PBKDF2 PBE function and handling of GOST PKCS#12 files.
+
Support has been added for the CryptoPro GOST CFB mode key meshing.
+
Implementations of XSalsa20 and ChaCha have been added. Support for reduced round Salas20 has been added.
+
Support has been added for RFC 6979 Determinstic DSA/ECDSA to the provider and the lightweight API.
+
Support for RC2 and RC4 in the CMS API has been generalised to work for other JCE providers.
+
Support for the Poly1305 MAC has been added to the lightweight API and the JCE Provider.
+
OpenSSL JcaPEMKeyConverter now supports OIDs for RSA and DSA as well as ECDSA.
+
A simplified certificate path API has been added to the PKIX package. It is not fully NIST compliant yet, however it does provide a range of basic validations without having to use the JCA.
+
Package version information is now included in the jar MANIFEST.MF.
+
The JDK 1.5+ provider will now recognise and use GCMParameterSpec if it is run in a 1.7 JVM.
+
Client side support and some server side support has been added for TLS/DTLS 1.2.
+
+
2.35.4 Notes
+
+
org.bouncycastle.crypto.DerivationFunction is now a base interface, the getDigest() method appears on DigestDerivationFunction.
+
Recent developments at NIST indicate the SHA-3 may be changed before final standardisation. Please bare this in mind if you are using it.
+
Other recent developments have raised concerns about the DualECDRBG. We have left the class in place for now, but it is now possible to provide your own parameter values, rather than using the NIST defined ones, if you choose to do so.
+
Most deprecated methods have been removed from the PKIX API.
+
As the IDEA patent has finally expired, IDEA is now supported by the standard provider.
+
ECDH support for OpenPGP should still be regarded as experimental. It is still possible there will be compliance issues with other implementations.
Occasional ArrayOutOfBounds exception in DSTU-4145 signature generation has been fixed.
+
The handling of escaped characters in X500 names is much improved.
+
The BC CertificateFactory no longer returns null for CertificateFactory.getCertPathEncodings().
+
PKCS10CertificationRequestBuilder now encodes no attributes as empty by default. Encoding as absent is still available via a boolean flag.
+
DERT61String has been reverted back to its previous implementation. A new class DERT61UTF8String has been introduced which defaults to UTF-8 encoding.
+
OAEPEncoding could throw an array output bounds exception for small keys with large mask function digests. This has been fixed.
+
PEMParser would throw a NullPointerException if it ran into explicit EC curve parameters, it would also throw an Exception if the named curve was not already defined. The parser now returns X9ECParmameters for explicit parameters and returns an ASN1ObjectIdentifier for a named curve.
+
The V2TBSCertListGenerator was adding the wrong date type for CRL invalidity date extensions. This has been fixed.
+
+
2.36.3 Additional Features and Functionality
+
+
A SecretKeyFactory has been added that enables use of PBKDF2WithHmacSHA.
+
Support has been added to PKCS12 KeyStores and PfxPdu to handle PKCS#5 encrypted private keys.
+
Support has been added for SHA-512/224, SHA-512/256, as well as a general SHA-512/t in the lightweight API.
+
The JcaPGPPrivateKey class has been added to provide better support in the PGP API for HSM private keys.
+
A new KeyStore type, BKS-V1, has been added for people needing to create key stores compatible with earlier versions of Bouncy Castle. Please note this keystore type offers a reduced integrity check of 16 bits and the rgular BKS should be used where possible.
+
Some extra generation methods have been added to TimeStampResponseGenerator to allow more control in the generation of TimeStampResponses.
+
It is now possible to override the SignerInfo attributes during TimeStampTokenGeneration.
+
The TSP API now supports generation of certIDs based on digests other than SHA-1.
+
OCSP responses can now be included in CMS SignedData objects.
+
The SipHash MAC algorithm has been added to the lightweight API and the provider.
+
ISO9796-2 PSS signatures can now be initialised with a signature to allow the signer to deal with odd recovered message lengths on verification.
+
The 4 DRBGs described in NIST SP 800-90A have been added to the prng package together with SecureRandom builders.
+
Support has been added for OCB mode in the lightweight API.
+
DSA version 2 parameter and key generation is now supported in the provider and lightweight API.
+
A new interface Memoable has been added for objects that can copy in and out their state. The digest classes now support this. A special
+class NonMemoableDigest has been added which hides the Memoable interface where it should not be available.
+
TDEA is now recognised as an alias for DESede.
+
A new package org.bouncycastle.crypto.ec has been introduced to the light wieght API with a range of EC based cryptographic operators.
+
The OpenPGP API now supports password changing on V3 keys if the appropriate PBEKeyEncryptor is used.
+
The OpenPGP API now supports password changing on secret key rings where only the private keys for the subkeys have been exported.
+
Support has been added to the lightweight API for RSA-KEM and ECIES-KEM.
+
Support has been added for NIST SP 800-38D - GMAC to AES and other 128 bit block size algorithms.
+
The org.bouncycastle.crypto.tls package has been extended to support client and server side TLS 1.1.
+
The org.bouncycastle.crypto.tls package has been extended to support client and server side DTLS 1.0.
+
A basic commitment package has been introduced into the lightweight API containing a digest based commitment scheme.
+
It is now possible to set the NotAfter and NotBefore date in the CRMF CertificateRequestMessageBuilder class.
+
+
2.36.4 Notes
+
+
The NTRU implementation has been moved into the org.bouncycastle.pqc package hierarchy.
+
The change to PEMParser to support explicit EC curves is not backward compatible. If you run into a named curve you need to use org.bouncycastle.asn1.x9.ECNamedCurveTable.getByOID() to look the curve up if required.
Occasional key compatibility issues in IES due to variable length keys have been fixed.
+
PEMWriter now recognises the new PKCS10CertificationRequest object.
+
The provider implementation for RSA now resets when the init method is called.
+
SignerInformation has been rewritten to better support signers without any associated signed attributes.
+
An issue with an incorrect version number of SignedData associated with the use of SubjectKeyIdentifiers has now been fixed.
+
An issue with the equals() check in BCStrictStyle has been fixed.
+
The BC SSL implementation has been modified to deal with the "Lucky Thirteen" attack.
+
A regression in 1.47 which prevented key wrapping with regular symmetric PBE algorihtms has been fixed.
+
+
2.37.3 Additional Features and Functionality
+
+
IES now supports auto generation of ephemeral keys in both the JCE and the lightweight APIs.
+
A new class PEMParser has been added to return the new CertificateHolder and Request objects introduced recently.
+
An implementation of Password Authenticated Key Exchange by Juggling (J-PAKE) has now been added to the lightweight API.
+
Support has now been added for the DSTU-4145-2002 to the lightweight API and the provider.
+
The BC X509Certificate implementation now provides support for the JCA methods X509Certificate.getSubjectAlternativeNames() and X509Certificate.getIssuerAlternativeNames().
+
PEMReader can now be configured to support different providers for encyrption and public key decoding.
+
Some extra DSA OIDs have been added to the supported list for the provider.
+
The BC provider will now automatically try to interpret other provider software EC private keys. It is no longer necessary to use a KeyFactory for conversion.
+
A new provider, the BCPQC (for BC Post Quantum) provider has been added with support for the Rainbow signature algorithm and the McEliece family of encryption algorithms.
+
Support has been added for the SHA3 family of digests to both the provider and the lightweight API.
+
T61String now uses UTF-8 encoding by default rather than a simple 8 bit transform.
OpenPGP ID based certifications now support UTF-8. Note: this may mean that some old certifications no longer validate - if this happens a retry can be added using by converting the ID using Strings.fromByteArray(Strings.toByteArray(id)) - this will strip out the top byte in each character.
+
IPv4/IPv6 parsing in CIDR no longer assumes octet boundaries on a mask.
+
The CRL PKIX routines will now only rebuild the CRL as a last resort when looking for the certificate issuer.
+
The DEK-Info header in PEM generation was lower case. It is now upper case in accordance with RFC 1421.
+
An occasional issue causing an OutOfMemoryException for PGP compressed data generation has now been fixed.
+
An illegal argument exception that could occur with multi-valued RDNs in the X509v3CertificateBuilder has been fixed.
+
Shared secret calculation in IES could occasionally add a leading zero byte. This has been fixed.
+
PEMReader would choke on a private key with an empty password. This has been fixed.
+
The default MAC for a BKS key store was 2 bytes, this has been upgraded to 20 bytes. This fix is now also referred to in CVE-2018-5382.
+
BKS key store loading no longer freezes on negative iteration counts.
+
A regression in 1.46 which prevented parsing of PEM files with extra text at the start has been fixed.
+
CMS secret key generation now attempts to stop use of invalid lengths with OIDs that predefine a key length.
+
Check of DH parameter L could reject some valid keys. This is now fixed.
+
+
+
2.38.3 Additional Features and Functionality
+
+
Support is now provided via the RepeatedKey class to enable IV only re-initialisation in the JCE layer. The same effect can be acheived in the light weight API by using null as the key parameter when creating a ParametersWithIV object.
+
CRMF now supports empty poposkInput.
+
The OpenPGP API now supports operator based interfaces for most operations and lightweight implementations have been added for JCE related functionality.
+
JcaSignerId and JceRecipientId will now match on serial number, issuer, and the subject key identifier if it's available.
+
CMS Enveloped and AuthenticatedData now support OriginatorInfo.
+
NTRU encryption and signing is now provided in the lightweight source and the ext version of the provider.
+
There is now API support for Extended Access Control (EAC).
+
The performance of CertPath building and validation has been improved.
+
The TLS Java Client API has been updated to make support for GSI GSSAPI possible.
+
Support for ECDSA_fixed_ECDH authentication has been added to the TLS client.
+
Support for the Features signature sub-packet has been added to the PGP API.
+
The number of lightweight operators for PGP and CMS/SMIME has been increased.
+
Classes involved in CRL manipulation have been rewritten to reduce memory requirements for handling and parsing extremely large CRLs.
+
RFC 5751 changed the definition of the micalg parameters defined in RFC 3851. The SMIMESignedGenerator is now up to date with the latest micalg parameter set and a constructor has been added to allow the old micalg parameter set to be used.
+
An operator based framework has been added for processing PKCS#8 and PKCS#12 files.
+
The J2ME lcrypto release now includes higher level classes for handling PKCS, CMS, CRMF, CMP, EAC, OpenPGP, and certificate generation.
+
+
+
2.38.4 Other notes
+
+Okay, so we have had to do another release. The issue we have run into is that we probably didn't go far enough in 1.46, but we are now confident that moving from this release to 2.0 should be largely just getting rid of deprecated methods. While this release does change a lot it is relatively straight forward to do a port and we have a porting guide which explains the important ones. The area there has been the most change in is the ASN.1 library which was in bad need of a rewrite after 10 years of patching. On the bright side the rewrite did allow us to eliminate a few problems and bugs in the ASN.1 library, so we have some hope anyone porting to it will also have similar benefits. As with 1.46 the other point of emphasis has been making sure interface support is available for operations across the major APIs, so the lightweight API or some local role your own methods can be used instead for doing encryption and signing.
+
An edge condition in ECDSA which could result in an invalid signature has been fixed.
+
Exhaustive testing has been performed on the ASN.1 parser, eliminating another potential OutOfMemoryException and several escaping run time exceptions.
+
BC generated certificates generated different hashCodes from other equivalent implementations. This has been fixed.
+
Parsing an ESSCertIDv2 would fail if the object did not include an IssuerSerialNumber. This has been fixed.
+
DERGeneralizedTime.getDate() would produce incorrect results for fractional seconds. This has been fixed.
+
PSSSigner would produce incorrect results if the MGF digest and content digest were not the same. This has been fixed.
+
+
2.39.3 Additional Features and Functionality
+
+
A null genTime can be passed to TimeStampResponseGenerator.generate() to generate timeNotAvailable error responses.
+
Support has been added for reading and writing of openssl PKCS#8 encrypted keys.
+
New streams have been added for supporting general creation of PEM data, and allowing for estimation of output size on generation. Generators have been added for some of the standard OpenSSL objects.
+
CRL searching for CertPath validation now supports the optional algorithm given in Section 6.3.3 of RFC 5280, allowing the latest CRL to be used for a set time providing the certificate is unexpired.
+
AES-CMAC and DESede-CMAC have been added to the JCE provider.
+
Support for CRMF (RFC 4211) and CMP (RFC 4210) has been added.
+
BufferedBlockCipher will now always reset after a doFinal().
+
Support for CMS TimeStampedData (RFC 5544) has been added.
+
JCE EC keypairs are now serialisable.
+
TLS now supports client-side authentication.
+
TLS now supports compression.
+
TLS now supports ECC cipher suites (RFC 4492).
+
PGP public subkeys can now be separately decoded and encoded.
+
An IV can now be passed to an ISO9797Alg3Mac.
+
+
2.39.4 Other notes
+
+Baring security patches we expect 1.46 will be the last of the 1.* releases. The next release of
+BC will be version 2.0. For this reason a lot of things in 1.46 that relate to CMS have been deprecated and
+new methods have been added to the CMS and certificate handling APIs which provide greater flexibility
+in how digest and signature algorithms get used. It is now possible to use the lightweight API or a simple
+custom API with CMS and for certificate generation. In addition a lot of methods and some classes that were
+deprecated for reasons of been confusing, or in some cases just plan wrong, have been removed.
+
+
+So there are four things useful to know about this release:
+
+
It's not a simple drop in like previous releases, if you wish migrate to it you will need to recompile your application.
+
If you avoid deprecated methods it should be relatively painless to move to version 2.0
+
The X509Name class will utlimately be replacde with the X500Name class, the getInstance() methods on both these classes allow conversion from one type to another.
+
The org.bouncycastle.cms.RecipientId class now has a collection of subclasses to allow for more specific recipient matching. If you are creating your own recipient ids you should use the constructors for the subclasses rather than relying on the set methods inherited from X509CertSelector. The dependencies on X509CertSelector and CertStore will be removed from the version 2 CMS API.
OpenPGP now supports UTF-8 in file names for literal data.
+
The ASN.1 library was losing track of the stream limit in a couple of places, leading to the potential of an OutOfMemoryError on a badly corrupted stream. This has been fixed.
+
The provider now uses a privileged block for initialisation.
+
JCE/JCA EC keys are now serialisable.
+
+
2.40.3 Additional Features and Functionality
+
+
Support for EC MQV has been added to the light weight API, provider, and the CMS/SMIME library.
+
+
2.40.4 Security Advisory
+
+
This version of the provider has been specifically reviewed to eliminate possible timing attacks on algorithms such as GCM and CCM mode.
The reset() method in BufferedAsymmetricBlockCipher is now fully clearing the buffer.
+
Use of ImplicitlyCA with KeyFactory and Sun keyspec no longer causes NullPointerException.
+
X509DefaultEntryConverter was not recognising telephone number as a PrintableString field. This has been fixed.
+
The SecureRandom in the J2ME was not using a common seed source, which made cross seeeding of SecureRandom's impossible. This has been fixed.
+
Occasional uses of "private final" on methods were causing issues with some J2ME platforms. The use of "private final" on methods has been removed.
+
NONEwithDSA was not resetting correctly on verify() or sign(). This has been fixed.
+
Fractional seconds in a GeneralisedTime were resulting in incorrect date conversions if more than 3 decimal places were included due to the Java date parser. Fractional seconds are now truncated to 3 decimal places on conversion.
+
The micAlg in S/MIME signed messages was not always including the hash algorithm for previous signers. This has been fixed.
+
SignedMailValidator was only including the From header and ignoring the Sender header in validating the email address. This has been fixed.
+
The PKCS#12 keystore would throw a NullPointerException if a null password was passed in. This has been fixed.
+
CertRepMessage.getResponse() was attempting to return the wrong underlying field in the structure. This has been fixed.
+
PKIXCertPathReviewer.getTrustAnchor() could occasionally cause a null pointer exception or an exception due to conflicting trust anchors. This has been fixed.
+
Handling of explicit CommandMap objects with the generation of S/MIME messages has been improved.
+
+
2.41.3 Additional Features and Functionality
+
+
PEMReader/PEMWriter now support encrypted EC keys.
+
BC generated EC private keys now include optional fields required by OpenSSL.
+
Support for PSS signatures has been added to CMS and S/MIME.
+
CMS processing will attempt to recover if there is no AlgorithmParameters object for a provider and use an IvParameterSpec where possible.
+
CertificateID always required a provider to be explicitly set. A null provider is now interpreted as a request to use the default provider.
+
SubjectKeyIdentifier now supports both methods specified in RFC 3280, section 4.2.1.2 for generating the identifier.
+
Performance of GCM mode has been greatly improved (on average 10x).
+
The BC provider has been updated to support the JSSE in providing ECDH.
+
Support for mac lengths of 96, 104, 112, and 120 bits has been added to existing support for 128 bits in GCMBlockCipher.
+
General work has been done on trying to propagate exception causes more effectively.
+
Support for loading GOST 34.10-2001 keys has been improved in the provider.
+
Support for raw signatures has been extended to RSA and RSA-PSS in the provider. RSA support can be used in CMSSignedDataStreamGenerator to support signatures without signed attributes.
Multiple countersignature attributes are now correctly collected.
+
Two bugs in HC-128 and HC-256 related to sign extension and byte swapping have been fixed. The implementations now pass the latest ecrypt vector tests.
+
X509Name.hashCode() is now consistent with equals.
+
+
2.42.3 Security Advisory
+
+
The effect of the sign extension bug was to decrease the key space the HC-128 and HC-256 ciphers were operating in and the byte swapping inverted every 32 bits of the generated stream. If you are using either HC-128 or HC-256 you must upgrade to this release.
The GeneralName String constructor now supports IPv4 and IPv6 address parsing.
+
An issue with nested-multiparts with postamble for S/MIME that was causing signatures to fail verification has been fixed.
+
ESSCertIDv2 encoding now complies with RFC 5035.
+
ECDSA now computes correct signatures for oversized hashes when the order of the base point is not a multiple of 8 in compliance with X9.62-2005.
+
J2ME SecureRandom now provides additional protection against predictive and backtracking attacks when high volumes of random data are generated.
+
Fix to regression from 1.38: PKIXCertPathCheckers were not being called on intermediate certificates.
+
Standard name "DiffieHellman" is now supported in the provider.
+
Better support for equality tests for '#' encoded entries has been added to X509Name.
+
+
2.44.3 Additional Features and Functionality
+
+
Camellia is now 12.5% faster than previously.
+
A smaller version (around 8k compiled) of Camellia, CamelliaLightEngine has also been added.
+
CMSSignedData generation now supports SubjectKeyIdentifier as well as use of issuer/serial.
+
A CMSPBE key holder for UTF-8 keys has been added to the CMS API.
+
Salt and iteration count can now be recovered from PasswordRecipientInformation.
+
Methods in the OpenPGP, CMS, and S/MIME APIs which previously could only take provider names can now take providers objects as well (JDK1.4 and greater).
+
Support for reading and extracting personalised certificates in PGP Secret Key rings has been added.
EAX mode ciphers were not resetting correctly after a doFinal/reset. This has been fixed.
+
The SMIME API was failing to verify doubly nested multipart objects in signatures correctly. This has been fixed.
+
Some boolean parameters to IssuingDistributionPoint were being reversed. This has been fixed.
+
A zero length RDN would cause an exception in an X509Name. This has been fixed.
+
Passing a null to ExtendedPKIXParameters.setTrustedACIssuers() would cause a NullPointerException. This has been fixed.
+
CertTemplate was incorrectly encoding issuer and subject fields when set.
+
hashCode() for X509CertificateObject was very poor. This has been fixed.
+
Specifying a greater than 32bit length for a stream and relying on the default BCPGOutputStream resulted in corrupted data. This has been fixed.
+
PKCS7Padding validation would not fail if pad length was 0. This has been fixed.
+
javax.crypto classes no longer appear in the JDK 1.3 provider jar.
+
Signature creation time was not being properly initialised in new V4 PGP signature objects although the encoding was correct. This has been fixed.
+
The '+' character can now be escaped or quoted in the constructor for X509Name, X509Prinicipal.
+
Fix to regression from 1.38: PKIXCertPathValidatorResult.getPublicKey was returning the wrong public key when the BC certificate path validator was used.
+
+
2.45.3 Additional Features and Functionality
+
+
Galois/Counter Mode (GCM) has been added to the lightweight API and the JCE provider.
+
SignedPublicKeyAndChallenge and PKCS10CertificationRequest can now take null providers if you need to fall back to the default provider mechanism.
+
The TSP package now supports validation of responses with V2 signing certificate entries.
+
Unnecessary local ID attributes on certificates in PKCS12 files are now automatically removed.
+
The PKCS12 store types PKCS12-3DES-3DES and PKCS12-DEF-3DES-3DES have been added to support generation of PKCS12 files with both certificates and keys protected by 3DES.
+
+
2.45.4 Additional Notes
+
+
Due to problems for some users caused by the presence of the IDEA algorithm, an implementation is no longer included in the default signed jars. Only the providers of the form bcprov-ext-*-*.jar now include IDEA.
A bug causing the odd NullPointerException has been removed from the LocalizedMessage class.
+
IV handling in CMS for the SEED and Camellia was incorrect. This has been fixed.
+
ASN.1 stream parser now throws exceptions for unterminated sequences.
+
EAX mode was not handling non-zero offsetted data correctly and failing. This has been fixed.
+
The BC X509CertificateFactory now handles multiple certificates and CRLs in streams that don't support marking.
+
The BC CRL implementation could lead to a NullPointer exception being thrown if critical extensions were missing. This has been fixed.
+
Some ASN.1 structures would cause a class cast exception in AuthorityKeyIdentifier. This has been fixed.
+
The CertID class used by the TSP library was incomplete. This has been fixed.
+
A system property check in PKCS1Encoding to cause a AccessControlException under some circumstances. This has been fixed.
+
A decoding issue with a mis-identified tagged object in CertRepMessage has been fixed.
+
\# is now properly recognised in the X509Name class.
+
+
2.46.3 Additional Features and Functionality
+
+
Certifications associated with user attributes can now be created, verified and removed in OpenPGP.
+
API support now exists for CMS countersignature reading and production.
+
The TSP package now supports parsing of responses with V2 signing certificate entries.
+
Lazy evaluation of DER sequences has been introduced to ASN1InputStream to allow support for larger sequences.
+
KeyPurposeId class has been updated for RFC 4945.
+
CertPath processing has been further extended to encompass the NIST CertPath evaluation suite.
+
Initial support has been added for HP_CERTIFICATE_REQUEST in the TLS API.
+
Providers for JDK 1.4 and up now use SignatureSpi directly rather than extending Signature. This is more in track with the way dynamic provider selection now works.
+
PGP example programs now handle blank names in literal data objects.
+
The ProofOfPossession class now better supports the underlying ASN.1 structure.
+
Support has been added to the provider for the VMPC MAC.
SMIME signatures containing non-standard quote-printable data could be altered by SMIME encryption. This has been fixed.
+
CMS signatures that do not use signed attributes were vulnerable to one of Bleichenbacher's RSA signature forgery attacks. This has been fixed.
+
The SMIMESignedParser(Part) constructor was not producing a content body part that cleared itself after writeTo() as indicated in the JavaDoc. This has been fixed.
+
BCPGInputStream now handles data blocks in the 2**31->2**32-1 range.
+
A bug causing second and later encrypted objects to be ignored in KeyBasedFileProcessor example has been fixed.
+
Value of the TstInfo.Tsa field is now directly accessible from TimeStampTokenInfo.
+
Generating an ECGOST-3410 key using an ECGenParameterSpec could cause a ClassCastException in the key generator. This has been fixed.
+
Use of the parameters J and L in connection with Diffie-Hellman parameters in the light weight API was ambiguous and confusing. This has been dealt with.
+
Some entities were not fully removed from a PKCS#12 file when deleted due to case issues. This has been fixed.
+
Overwriting entities in a PKCS#12 file was not fully compliant with the JavaDoc for KeyStore. This has been fixed.
+
TlsInputStream.read() could appear to return end of file when end of file had not been reached. This has been fixed.
+
+
2.47.3 Additional Features and Functionality
+
+
Buffering in the streaming CMS has been reworked. Throughput is now usually higher and the behaviour is more predictable.
+
It's now possible to pass a table of hashes to a CMS detached signature rather than having to always pass the data.
+
Classes supporting signature policy and signer attributes have been added to the ASN.1 ESS/ESF packages.
+
Further work has been done on optimising memory usage in ASN1InputStream. In some cases memory usage has been reduced to 25% of previous.
+
Pre-existing signers can now be added to the SMIMESignedGenerator.
+
Support has been added to the provider for the VMPC stream cipher.
+
CertPathReviewer has better handling for problem trust anchors.
+
Base64 encoder now does initial size calculations to try to improve resource usage.
Class loader issues with i18n classes should now be fixed.
+
X.500 name serial number value now output as unambiguous long form SERIALNUMBER
+
The fix for multipart messages with mixed content-transfer-encoding in 1.35 caused a
+regression for processing some messages with embedded multiparts that contained blank lines of preamble text - this should now be fixed.
+
Another regression which sometimes affected the SMIMESignedParser has also been fixed.
+
SharedFileInputStream compatibility issues with JavaMail 1.4 have been addressed.
+
JDK 1.5 and later KeyFactory now accepts ECPublicKey/ECPrivateKey to translateKey.
+
JDK 1.5 and later KeyFactory now produces ECPublicKeySpec/ECPrivateKeySpec on getKeySpec.
+
Some surrogate pairs were not assembled correctly by the UTF-8 decoder. This has been fixed.
+
Alias resolution in PKCS#12 is now case insensitive.
+
+
2.49.3 Additional Features and Functionality
+
+
CMS/SMIME now supports basic EC KeyAgreement with X9.63.
+
CMS/SMIME now supports RFC 3211 password based encryption.
+
Support has been added for certificate, CRL, and certification request generation for the regular SHA algorithms with RSA-PSS.
+
Further work has been done in speeding up prime number generation in the lightweight BigInteger class.
+
Support for the SEED algorithm has been added to the provider and the lightweight API.
+
Support for the Salsa20 algorithm has been added to the provider and the lightweight API.
+
CMS/SMIME now support SEED and Camellia
+
A table of TeleTrusT curves has been added.
+
CMSSignedData creation and Collection CertStore now preserves the order of certificates/CRls if the backing collection is ordered.
+
CMS Signed objects now use BER encoding for sets containing certificates and CRLs, allowing specific ordering to be specified for the objects contained.
+
CMS enveloped now works around providers which throw UnsupportedOperationException if key wrap is attempted.
+
DSASigner now handles long messages. SHA2 family digest support for DSA has been added to the provider.
Test data files are no longer in the provider jars.
+
SMIMESignedParser now handles indefinite length data in SignerInfos.
+
Under some circumstances the SMIME library was failing to canonicalize mixed-multipart data correctly. This has been fixed.
+
The l parameter was being ignored for the DH and ElGamal key generation. This has been fixed.
+
The ASN1Sequence constructor for OtherRecipientInfo was broken. It has been fixed
+
Regression - DN fields SerialNumber and Country were changed to encode as UTF8String in 1.34 in the X509DefaultEntryConverter, these now encode as PrintableString.
+
CMSSignedData.replaceSigners() was not replacing the digest set as well as the signers. This has been fixed.
+
DERGeneralizedTime produced a time string without a GMT offset if they represented local time. This has been fixed.
+
Some temp files were still being left on Windows by the SMIME library. All of the known problems have been fixed.
+
Comparing ASN.1 object for equality would fail in some circumstances. This has been fixed.
+
The IESEngine could incorrectly encrypt data when used in block cipher mode. This has been fixed.
+
An error in the encoding of the KEKRecipientInfo has been fixed. Compatability warning: this may mean that versions of BC mail prior to 1.35 will have trouble processing KEK messages produced by 1.35 or later.
+
+
2.50.3 Additional Features and Functionality
+
+
Further optimisations to elliptic curve math libraries.
+
API now incorporates a CertStore which should be suitable for use with LDAP.
+
The streaming ASN.1 API is now integrated into the base one, the sasn1 package has been deprecated.
+
The OpenPGP implementation now supports SHA-224 and BZIP2.
+
The OpenPGP implementation now supports SHA-1 checksumming on secret keys.
+
The JCE provider now does RSA blinding by default.
+
CMSSignedDataParser now provides methods for replacing signers and replacing certificates and CRLs.
+
A generic store API has been added to support CRLs, Certificates and Attribute certificates.
+
The CMS/SMIME API now supports inclusion and retrieval of version 2 attribute certificates.
+
Support for generating CertificationRequests and Certificates has been added for GOST-3410-2001 (ECGOST)
+
CMS/SMIME now support ECGOST
+
Basic BER Octet Strings now encode in a canonical fashion by default.
+
DERUTCTime can now return Date objects
+
Validating constructors have been added to DERPrintableString, DERIA5String, and DERNumericString.
+
A lightweight API for supporting TLS has been added.
+
Implementations of the TEA and XTEA ciphers have been added to the light weight API and the provider.
+
PEMReader now supports OpenSSL ECDSA key pairs.
+
PGP packet streams can now be closed off using close() on the returned stream as well as closing the generator.
Endianess of integer conversion in KDF2BytesGenerator was incorrect. This has been fixed.
+
Generating critical signature subpackets in OpenPGP would result in a zero packet tag. This has been fixed.
+
Some flags in PKIFailure info were incorrect, and the range of values was incomplete. The range of values has been increased and the flags corrected.
+
The helper class for AuthorityKeyExtension generation was including the subject rather than the issuer DN of the CA certificate. This has been fixed.
+
SMIMESignedParser now avoids JavaMail quoted-printable recoding issue.
+
Verification of RSA signatures done with keys with public exponents of 3 was vunerable to
+Bleichenbacher's RSA signature forgery attack. This has been fixed.
+
PGP Identity strings were only being interpreted as ASCII rather than UTF-8. This has been fixed.
+
CertificateFactory.generateCRLs now returns a Collection rather than null.
+
+
2.51.3 Additional Features and Functionality
+
+
An ISO18033KDFParameters class had been added to support ISO18033 KDF generators.
+
An implemention of the KDF1 bytes generator algorithm has been added.
+
An implementation of NaccacheStern encryption has been added to the lightweight API.
+
X509V2CRLGenerator can now be loaded from an existing CRL.
+
The CMS enveloped data generators will now attempt to use the default provider for encryption if the passed in provider can only handle key exchange.
+
OpenPGP file processing has been substantially speeded up.
+
The PKCS1Encoder would accept PKCS1 packets which were one byte oversize. By default this will now cause an error. However, as there are still implementations which still produce such packets the older behaviour can be turned on by setting the VM system property org.bouncycastle.pkcs1.strict to false before creating an RSA cipher using PKCS1 encoding.
+
A target has been added to the bc-build.xml to zip up the source code rather than leaving it in a directory tree.
+The build scripts now run this target by default.
+
Use of toUpperCase and toLowerCase has been replaced with a locale independent converter where appropriate.
+
Support for retrieving the issuers of indirect CRLs has been added.
+
Classes for doing incremental path validation of PKIX cert paths have been added to the X.509 package and S/MIME.
+
Locale issues with String.toUpperCase() have now been worked around.
+
Optional limiting has been added to ASN1InputStream to avoid possible OutOfMemoryErrors on corrupted streams.
+
Support has been added for SHA224withECDSA, SHA256withECDSA, SHA384withECDSA, and SHA512withECDSA for the generation of signatures, certificates, CRLs, and certification requests.
+
Performance of the prime number generation in the BigInteger library has been further improved.
+
In line with RFC 3280 section 4.1.2.4 DN's are now encoded using UTF8String by default rather than PrintableString.
+
+
2.51.4 Security Advisory
+
+
If you are using public exponents with the value three you *must* upgrade to this release, otherwise it
+will be possible for attackers to exploit some of Bleichenbacher's RSA signature forgery attacks on your applications.
Further work has been done on RFC 3280 compliance.
+
The ASN1Sequence constructor for SemanticsInformation would sometimes throw a ClassCastException on reconstruction an object from a byte stream. This has been fixed.
+
The SharedInputStream.read(buf, 0, len) method would return 0 at EOF, rather than -1. This has been fixed.
+
X9FieldElement could fail to encode a Fp field element correctly. This has been fixed.
+
The streaming S/MIME API was occasionally leaving temporary files around. The SIMEUtil class responsible for creating the files now returns a FileBackedMimeBodyPart object
+which has a dispose method on it which should allow removal of the file backing the body part.
+
An encoding defect in EnvelopedData generation in the CMS streaming, S/MIME API has been fixed.
+
DER constructed octet strings could cause exceptions in the streaming ASN.1 library. This has been fixed.
+
Several compatibility issues connected with EnvelopedData decoding between the streaming CMS library and other libraries have been fixed.
+
JDK 1.4 and earlier would sometimes encode named curve parameters explicitly. This has been fixed.
+
An incorrect header for SHA-256 OpenPGP clear text signatures has been fixed.
+
An occasional bug that could result in invalid clear text signatures has been fixed.
+
OpenPGP clear text signatures containing '\r' as line separators were not being correctly canonicalized. This has been fixed.
+
+
+
2.53.3 Additional Features and Functionality
+
+
The ASN.1 library now includes classes for the ICAO Electronic Passport.
+
Support has been added to CMS and S/MIME for ECDSA.
+
Support has been added for the SEC/NIST elliptic curves.
+
Support has been added for elliptic curves over F2m.
+
Support has been added for repeated attributes in CMS and S/MIME messages.
+
A wider range of RSA-PSS signature types is now supported for CRL and Certificate verification.
+
+
2.53.4 Possible compatibility issue
+
+
Previously elliptic curve keys and points were generated with point compression enabled by default.
+Owing to patent issues in some jurisdictions, they are now generated with point compression disabled by default.
+
getCriticalExtensionOIDs on an X.509 attribute certificate was returning the non-critical set. This has been fixed.
+
Encoding uncompressed ECDSA keys could occasionally introduce an extra leading zero byte. This has been fixed.
+
Expiry times for OpenPGP master keys are now recognised across the range of possible certifications.
+
PGP 2 keys can now be decrypted by the the OpenPGP library.
+
PGP 2 signature packets threw an exception on trailer processing. This has been been fixed.
+
Attempting to retrieve signature subpackets from an OpenPGP version 3 signature would throw a null pointer exception. This has been fixed.
+
Another occasional defect in EC point encoding has been fixed.
+
In some cases AttributeCertificateHolder.getIssuer() would return an empty array for attribute certificates using the BaseCertificateID.
+This has been fixed.
+
OIDs with extremely large components would sometimes reencode with unnecessary bytes in their encoding. The optimal DER encoding will now be produced instead.
+
+
2.54.3 Additional Features and Functionality
+
+
The SMIME package now supports the large file streaming model as well.
+
Additional ASN.1 message support has been added for RFC 3739 in the org.bouncycastle.x509.qualified package.
+
Support has been added for Mac algorithm 3 from ISO 9797 to both the lightweight APIs and the provider.
+
The provider now supports the DESEDE64 MAC algorithm.
+
CertPathValidator has been updated to better support path validation as defined in RFC 3280.
+
Whirlpool was calculating the wrong digest for 31 byte data and could throw an exception for some other data lengths. This has been fixed.
+
AlgorithmParameters for IVs were returning a default of RAW encoding of the parameters when they should have been returning an
+ASN.1 encoding. This has been fixed.
+
Base64 encoded streams without armoring could cause an exception in PGPUtil.getDecoderStream(). This has been fixed.
+
PGPSecretKey.copyWithNewPassword() would incorrectly tag sub keys. This has been fixed.
+
PGPSecretKey.copyWithNewPassword() would not handle the NULL algorithm. This has been fixed.
+
Directly accessing the dates on an X.509 Attribute Certificate constructed from an InputStream would return null, not the date objects. This has been fixed.
+
KEKIdentifier would not handle OtherKeyAttribute objects correctly. This has been fixed.
+
GetCertificateChain on a PKCS12 keystore would return a single certificate chain rather than null if the alias passed in represented a certificate not a key. This has been fixed.
+
+
2.55.3 Additional Features and Functionality
+
+
RSAEngine no longer assumes keys are byte aligned when checking for out of range input.
+
PGPSecretKeyRing.removeSecretKey and PGPSecretKeyRing.insertSecretKey have been added.
+
There is now a getter for the serial number on TimeStampTokenInfo.
+
Classes for dealing with CMS objects in a streaming fashion have been added to the CMS package.
+
PGPCompressedDataGenerator now supports partial packets on output.
+
OpenPGP Signature generation and verification now supports SHA-256, SHA-384, and SHA-512.
+
Both the lightweight API and the provider now support the Camellia encryption algorithm.
+
HMac-SHA384 and HMac-SHA512 were not IETF compliant. This has been fixed.
+
The equals() method on ElGamalKeyParameters and DHKeyParameters in the lightweight API would sometimes
+return false when it should return true. This has been fixed.
+
Parse error for OpenSSL style PEM encoded certificate requests in the PEMReader has been fixed.
+
PGPPublicKey.getValidDays() now checks for the relevant signature for version 4 and later keys as well as using the
+version 3 key valid days field.
+
ISO9796 signatures for full recovered messsages could incorrectly verify for similar messages in some circumstances. This has been fixed.
+
The occasional problem with decrypting PGP messages containing compressed streams now appears to be fixed.
+
+
2.56.3 Additional Features and Functionality
+
+
Support has been added for the OIDs and key generation required for HMac-SHA224, HMac-SHA256, HMac-SHA384, and
+HMac-SHA512.
+
SignerInformation will used default implementation of message digest if signature provider doesn't support it.
+
The provider and the lightweight API now support the GOST-28147-94 MAC algorithm.
+
Headers are now settable for PGP armored output streams.
+
+
2.56.4 Notes
+
+
The old versions of HMac-SHA384 and HMac-SHA512 can be invoked as OldHMacSHA384 and OldHMacSHA512, or by using the OldHMac class in the
+lightweight API.
+
Signatures on binary encoded S/MIME messages could fail to validate when correct. This has been fixed.
+
getExtensionValue() on CRL Entries were returning the encoding of the inner object, rather than the octet string. This has been fixed.
+
CertPath implementation now returns an immutable list for a certificate path.
+
Generic sorting now takes place in the CertificateFactory.generateCertPath() rather than CertPathValidator.
+
DERGeneralizedTime can now handle time strings with milli-seconds.
+
Stateful CertPathCheckers were not being initialised in all cases, by the CertPathValidator. This has been fixed.
+
PGPUtil file processing methods were failing to close files after processing. This has been fixed.
+
A disordered set in a CMS signature could cause a CMS signature to fail to validate when it should. This has been fixed.
+
PKCS12 files where both the local key id and friendly name were set on a certificate would not parse correctly. This has been fixed.
+
Filetype for S/MIME compressed messages was incorrect. This has been fixed.
+
BigInteger class can now create negative numbers from byte arrays.
+
+
2.57.3 Additional Features and Functionality
+
+
S/MIME now does canonicalization on non-binary input for signatures.
+
Micalgs for the new SHA schemes are now supported.
+
Provided and lightweight API now support ISO 7816-4 padding.
+
The S/MIME API now directly supports the creation of certificate management messages.
+
The provider and the light weight API now support the cipher GOST-28147, the signature algorithms GOST-3410 (GOST-3410 94) and EC GOST-3410 (GOST-3410 2001), the message digest GOST-3411 and the GOST OFB mode (use GOFB).
+
CMSSignedDataGenerator will used default implementation of message digest if signature provider doesn't support it.
+
Support has been added for the creation of ECDSA certificate requests.
+
The provider and the light weight API now support the WHIRLPOOL message digest.
+
+
2.57.4 Notes
+
+
Patches for S/MIME binary signatures and canonicalization were actually applied in 1.27, but a couple of days after the release - if the class
+CMSProcessableBodyPartOutbound is present in the package org.bouncycastle.mail.smime you have the patched 1.27. We would recommend upgrading to 1.28 in any case
+as some S/MIME 3.1 recommendations have also been introduced for header creation.
+
GOST private keys are probably not encoding correctly and can be expected to change.
+
Typos in the provider which pointed Signature algorithms SHA256WithRSA, SHA256WithRSAEncryption, SHA384WithRSA, SHA384WithRSAEncryption, SHA512WithRSA, and SHA512WithRSAEncryption at the PSS versions of the algorithms have been fixed. The correct names for the PSS algorithms are SHA256withRSAandMGF1, SHA384withRSAandMGF1, and SHA512withRSAandMGF1.
+
X509CertificateFactory failed under some circumstances to reset properly if the input stream being passed
+to generateCertificate(s)() changed, This has been fixed.
+
OpenPGP BitStrength for DSA keys was being calculated from the key's generator rather than prime. This has been fixed.
+
Possible infinite loop in ASN.1 SET sorting has been removed.
+
SHA512withRSAandMGF1 with a zero length salt would cause an exception if used with a 1024 bit RSA key. This has been fixed.
+
Adding an Exporter to a PGPSubpacketVector added a Revocable instead. This has been fixed.
+
AttributeCertificateIssuer.getPrincipal() could throw an ArrayStoreException. This has been fixed.
+
CertPathValidator now guarantees to call any CertPathCheckers passed in for each certificate.
+
TSP TimeStampToken was failing to validate time stamp tokens with the issuerSerial field set in the ESSCertID structure. This has been fixed.
+
Path validation in environments with frequently updated CRLs could occasionally reject a valid path. This has been fixed.
+
+
2.58.3 Additional Features and Functionality
+
+
Full support has been added for the OAEPParameterSpec class to the JDK 1.5 povider.
+
Full support has been added for the PSSParameterSpec class to the JDK 1.4 and JDK 1.5 providers.
+
Support for PKCS1 signatures for SHA-256, SHA-384, and SHA-512 has been added to CMS.
+
PGPKeyRingCollection classes now support partial matching of user ID strings.
+
This release disables the quick check on the IV for a PGP public key encrypted message in order to help
+prevent applications being vunerable to oracle attacks.
+
The CertPath support classes now support PKCS #7 encoding.
+
Point compression can now be turned off when encoding elliptic curve keys.
+
+
2.58.4 Changes that may affect compatibility
+
+
org.bouncycastle.jce.interfaces.ElGamalKey.getParams() has been changed to getParameters() to avoid clashes with
+a JCE interface with the same method signature.
+
org.bouncycastle.jce.interfaces.ECKey.getParams() has been changed in JDK 1.5 to getParameters() to avoid clashes
+with a JCE interface with the same method signature. The getParams() method in pre-1.5 has been deprecated.
+
SHA256WithRSAEncryption, SHA384WithRSAEncryption, SHA512WithRSAEncryption now refer to their PKCS #1 V1.5 implementations. If you
+were using these previously you should use SHA256WithRSAAndMGF1, SHA384WithRSAAndMGF1, or SHA512WithRSAAndMGF1.
+
The X.509 class UserNotice assumed some of the optional fields were not optional. This has been fixed.
+
BCPGInputStream would break on input packets of 8274 bytes in length. This has been fixed.
+
Public key fingerprints for PGP version 3 keys are now correctly calculated.
+
ISO9796-2 PSS would sometimes throw an exception on a correct signature. This has been fixed.
+
ASN1Sets now properly sort their contents when created from scratch.
+
A bug introduced in the CertPath validation in the last release which meant some certificate paths would validate if they were invalid has been fixed.
+
+
2.59.3 Additional Features and Functionality
+
+
Support for JDK 1.5 naming conventions for OAEP encryption and PSS signing has been added.
+
Support for Time Stamp Protocol (RFC 3161) has been added.
+
Support for Mozilla's PublicKeyAndChallenge key certification message has been added.
+
OpenPGP now supports key rings containing GNU_DUMMY_S2K.
+
Support for the new versions (JDK 1.4 and later) of PBEKeySpec has been added to the providers.
+
PBEWithMD5AndRC2, PBEWithSHA1AndRC2 now generate keys rather than exceptions.
+
The BigInteger implementation has been further optimised to take more advantage of the Montgomery number capabilities.
+
+
2.59.4 JDK 1.5 Changes
+
+
The JDK 1.5 version of the provider now supports the new Elliptic Curve classes found in the java.security packages. Note: while we have tried to preserve some backwards compatibility people using Elliptic curve are likely to find some minor code changes are required when moving code from JDK 1.4 to JDK 1.5 as the java.security APIs have changed.
+
In some situations OpenPGP would overread when a stream had been
+broken up into partial blocks. This has been fixed.
+
Explicitly setting a key size for RC4 in the CMS library would cause
+an exception. This has been fixed.
+
getSignatures() on PGPPublicKey would throw a ClassCastException in some cases. This has been fixed.
+
Encapsulated signed data was been generated with the wrong mime headers, this has been fixed.
+
The isSignature method on PGPSecretKey now correctly identifies signing keys.
+
An interoperability issue with DH key exchange between the Sun JCE provider and the BC provider, concerning sign bit expansion, has been fixed.
+
The X509CertificateFactory would fail to reset correctly after reading an ASN.1 certificate chain. This has been fixed.
+
CertPathValidator now handles unsorted lists of certs.
+
The PGPSignatureGenerator would sometimes throw an exception when adding hashed subpackets. This has been fixed.
+
Ordered equality in X509Name was not terminating as early as possible. This has been fixed.
+
getBitStrength for PGPPublicKeys was returning the wrong value for ElGamal keys. This has been fixed.
+
getKeyExpirationTime/getSignatureExpirationTime was returning a Date rather than a delta. This isn't meaningful as a Date and has been changed to a long.
+
the crlIssuer field in DistributionPoint name was encoding/decoding incorrectly. This has been fixed.
+
X509Name now recognises international characters in the input string and
+stores them as BMP strings.
+
Parsing a message with a zero length body with SMIMESigned would cause an exception. This has been fixed.
+
Some versions of PGP use zeros in the data stream rather than a replication of the last two bytes of the iv as specified in the RFC to determine if the correct decryption key has been found. The decryption classes will now cope with both.
+
+
2.60.3 Additional Features and Functionality
+
+
Support for extracting signatures based on PGP user attributes has been
+added to PGPPublicKey.
+
BCPGArmoredInputStream should cope with plain text files better.
+
The OpenPGP library can now create indefinite length streams and handle packets greater than (2^32 - 1) in length.
+
Direct support for adding SignerUserID and PrimaryUserID has been added to the PGPSignatureSubpacketGenerator.
+
Support for ISO-9796-2/PSS has been added to the lightweight API.
+
API support for extracting recovered messages from signatures that support
+message recovery has been added to the lightweight API.
+
String value conversion in a DN being processed by X509Name is now fully
+configurable.
+
It is now possible to create new versions of CMSSignedData objects without
+having to convert the original object down to its base ASN.1 equivalents.
+
Support for adding PGP revocations and other key signatures has been added.
+
Support for SHA-224 and SHA224withRSA has been added.
+
Trailing bit complement (TBC) padding has been added.
+
OID components of up to 2^63 bits are now supported.
+
OpenPGP Secret key rings now parse key rings with user attribute packets in them correctly.
+
OpenPGP Secret key rings now parse key rings with GPG comment packets in them.
+
X509Name and X509Principal now correctly handle BitStrings.
+
OpenPGP now correctly recognises RSA signature only keys.
+
When re-encoding PGP public keys taken off secret keys getEncoded would
+sometimes throw a NullPointerException. This has been fixed.
+
A basic PKCS12 file with a single key and certificate, but no attributes, would cause a null pointer exception. This has been fixed.
+
Signature verification now handles signatures where the parameters block is missing rather than NULL.
+
Lightweight CBCBlockCipherMac was failing to add padding if padding was
+being explicitly provided and data length was a multiple of the block size. This has been fixed.
+
ZIP compression in PGP was failing to compress data in many cases. This has been fixed.
+
Signatures were occasionally produced with incorrect padding in their associated bit strings, this has been fixed.
+
An encoding error introduced in 1.23 which affected generation of the
+KeyUsage extension has been fixed.
+
+
2.61.3 Additional Features and Functionality
+
+
PKCS12 keystore now handles single key/certificate files without any attributes present.
+
Support for creation of PGPKeyRings incorporating sub keys has been added.
+
ZeroPadding for encrypting ASCII data has been added.
+
Reading a PGP Secret key file would sometimes cause a class cast exception. This has been fixed.
+
PGP will now read SecretKeys which are encrypted with the null algorithm.
+
PGP ObjectFactory will recognise Marker packets.
+
BasicConstraints class now handles default empty sequences correctly.
+
S2K Secret Key generation now supported in OpenPGP for keys greater than 160 bits, a bug causing
+it to occasionally generate the wrong key has been fixed.
+
OpenPGP implementation can now read PGP 8 keys.
+
Decoding issues with Secret Sub Keys should now be fixed.
+
PGP would occasionally unpack ElGamal encrypted data incorrectly, this has been fixed.
+
OCSP TBSRequest now uses abbreviated encoding if the default version is used.
+
X509Name class will now print names with nested pairs in component sets correctly.
+
RC4 now resets correctly on doFinal.
+
+
2.62.3 Additional Features and Functionality
+
+
PGP V3 keys and V3 signature generation is now supported.
+
Collection classes have been added for representing files of PGP public and secret keys.
+
PEMReader now supports "RSA PUBLIC KEY".
+
RipeMD256 and RipeMD320 have been added.
+
Heuristic decoder stream has been added to OpenPGP which "guesses" how the input is
+constructed.
+
ArmoredInputStream now recognises clear text signed files.
+
ArmoredOutputStream now provides support for generating clear text signed files.
+
Support has been added to CMS for RipeMD128, RipeMD160, and RipeMD256.
+
Support for generating certification directly and editing PGP public key
+certifications has been added.
+
Support has been added for modification detection codes to the PGP library.
+
Examples have been rewritten to take advantage of the above.
+
SMIMESigned can now covert data straight into a mime message.
+
DERGeneralizedTime getTime() method now handles a broader range of input strings.
+
The PKCS12 store would throw an exception reading PFX files that had attributes with no values. This has been fixed.
+
RSA Private Keys would not serialise if they had PKCS12 bag attributes attached to them, this has been fixed.
+
GeneralName was encoding OtherName as explicitly tagged, rather than implicitly tagged. This has been fixed.
+
ASN1 parser would sometimes mistake an implicit null for an implicit empty
+sequence. This has been fixed.
+
+
2.66.3 Additional Features and Functionality
+
+
S/MIME and CMS now support the draft standard for AES encryption.
+
S/MIME and CMS now support setable key sizes for the standard algorithms.
+
S/MIME and CMS now handle ARC4/RC4 encrypted messages.
+
The CertPath validator now passes the NIST test suite.
+
A basic OCSP implementation has been added which includes request generation
+and the processing of responses. Response generation is also provided, but should be treated as alpha quality code.
+
CMS now attempts to use JCA naming conventions in addition to the OID name
+in order to find algorithms.
+
Reuse of an CMSSignedObject could occasionally result in a class
+cast exception. This has been fixed.
+
The X.509 DistributionPointName occasionally encoded incorrectly. This has
+been fixed.
+
BasicConstraints construction would break if an ASN.1 sequence was used
+with only the required parameter. This has been fixed.
+
The DERObject constructor in OriginatorIdentifierOrKey was leaving
+the id field as null. This has been fixed.
+
+
2.68.3 Additional Functionality and Features
+
+
RC2 now supports the full range of parameter versions and effective
+key sizes.
+
CompressedData handling has been added to CMS/SMIME.
+
The 1.4 version now allows X500Principles to be generated directly
+from CRLs.
+
SMIME objects now support binary encoding. The number of signature
+types recognised has been increased.
+
CMS can create signed objects with encapsulated data. Note: while
+this was been done we realised we could simplify things, we did and
+for the most part people won't notice, other than the occasional
+reference to CMSSignable will need to be replaced with CMSProcessable.
+
X509Name and X509Principal now support forward and reverse X509Name
+to string conversion, with changeable lookup tables for converting OIDs
+into strings. Both classes also now allow the direction of encoding to
+be set when a string is converted as well as changeable lookup tables for
+string to OID conversion.
+
CRLS were only working for UTC time constructed Time objects, this has
+been fixed.
+
KeyUsage and ReasonFlags sometimes encoded longer than necessary. This
+has been fixed.
+
BER encoded sets are now recognised and dealt with.
+
Encoding issues in CMS which were causing problems with backwards
+compatibility with older CMS/SMIME clients have been fixed.
+
KeyFactory now allows for creation of RSAKey*Spec classes.
+
The X509CertSelector in the clean room CertPath API is now less likely
+to throw a NullPointerException at the wrong time.
+
Macs now clone correctly in the clean room JCE.
+
+
2.69.3 Additional Functionality and Features
+
+
PGPCFB support has been added to the provider and the lightweight API.
+
There are now three versions of the AESEngine, all faster than before,
+with the largest footprint one being the fastest. The JCE AES now refers
+to the fastest.
+
The 1.4 version of the library now allows for X500Principals to be
+generated directly from certificates.
+
X509Name has been extended to parse numeric oids, "oid." oids, and to
+recognise the LDAP UID.
+
Immutable sequences and sets have been introduced to the ASN.1 package.
+
The SMIME/CMS ASN.1 base classes have been rewritten to reduce the
+size of the package for use with the lightweight API.
+
The SMIME/CMS api's have been rewritten to allow them to take advantage
+of the Cert Path API, remove code suited to inclusion in the provider,
+and to support multiple recipients/signers.
+
The base string for the oids in asn1.x509.KeyPurposeId was incorrect. This
+has been fixed.
+
MimeBodyParts in the SMIME Generator did not have their Content-Type
+properly set up after decryption. This has been fixed.
+
If a X.509 certificate did not have all the keyUsage extension bits set,
+the provider wasn't padding the return value of the key usage extension to
+8 booleans in length. This has been fixed.
+
In some cases the simple BC keystore allowed overwriting of an alias with
+one of the same name. This has been fixed.
+
The key schedule for RC5-64 was not always being calculated correctly. This
+has been fixed.
+
On reset buffered blockcipher was only partially erasing the previous buffer. This has been fixed.
+
All lightweight mac classes now do a reset on doFinal.
+
ASN.1 object identifiers wouldn't encode the first byte correctly if the
+OID started with 2 and the second number was greater than 47. This has been
+fixed.
+
If a key had PKCS9 attributes associated with it on storage they took
+precedence over the local alias used to add the key to the PKCS12 key store.
+The local name now takes precedence.
+
ReasonFlags now correctly encodes.
+
+
2.70.3 Additional Functionality and Features
+
+
The PKCS12 key store now handles key bags in encryptedData bags.
+
The X509NameTokenizer now handles for '\' and '"' characters.
+
SMIME v2 compliance has been added. Use setVersion(2) in the generator classes.
+
The ASN.1 library now supports ENUMERATED, UniversalString and the X.509 library support for CRLs now includes CRLReason, and some elements of CertificatePolicies.
+
Both the provider and the lightweight library now support a basic SIC mode for block ciphers.
+
there was a bug in the BigInteger right shifting for > 31 bit shifts.
+This has been fixed.
+
x509 name had it's equality test based on the order of the directory
+elements, this has been fixed.
+
the mode used with the RSA cipher in KeyTransRecipientInfoParser in
+the smime implementation was not compatible with the Sun JCE.
+This has been fixed.
+
PKCS7 SignedData now supports single length signing chains.
+
When a root certificate had a different issuer id from the subject id, or
+had it's own AuthorityKeyExtension the PKCS12 key store would drop the root
+certificate from the certificate chain. This has been fixed.
+
The PKCS10 CertificationRequestInfo class always expected at least one
+attribute. This has been fixed.
+
UTF-8 strings are now correctly recognised.
+
The Tiger implementation was producing results in reverse byte
+order for each of the 3 words making up the digest. This has been fixed.
+
asn1.x509.ExtendedKeyUsage used to throw a null pointer exception
+on construction. This has been fixed.
+
+
2.71.3 Additional Functionality and Features
+
+
The BigInteger library now uses Montgomery numbers for modPow and is
+substantially faster.
+
SMIMECapabilities, and SMIMEEncryptionKeyPreference attributes added to S/MIME.
+
Increased range of key sizes available in S/MIME.
+
getInstance(ASN1TaggedObject, boolean) methods have been added to most ASN1 types.
+These deal with implicit/explicit tagging ambiguities with constructed types.
+
Added EncryptedPrivateKeyInfo object to the clean room JCE.
+
A PEMReader has been added for handling some of the openSSL PEM files.
+
The X.509 certificate factory supports a wider range of encodings and
+object identifiers.
+
The TBSCertificate object in the ASN.1 library now properly implements
+ the Time object, rather returning UTC time.
+
The DESedeKeyGenerator now supports 112 and 168 bit key generation.
+
Certificates with the keyId set to null in the AuthorityKeyIdentifier extensions would sometimes cause the PKCS12 store to throw a NullPointer exception. This has been fixed.
+
toByteArray in the big integer class was not always producing correct
+ results for negative numbers. This has been Fixed.
+
+
2.72.3 Additional Functionality and Features
+
+
The key to keySpec handling of the secret key factories has been improved.
+
There is now a SMIME implementation and a more complete CMS
+ implementation (see CONTRIBUTORS file for additonal details).
+
A CertPath implementation that runs under jdk1.1 and jdk1.4 has also
+ being contributed. A work around to allow it to be used with jdk1.2 and
+ jdk1.3 has also been added. Note: the implementation is not quite complete
+ because policymapping, name and subtree constraints are not yet
+ implemented.
+
The API now supports the generation of PKCS7 signed objects. Note: this
+ is still beta code - one known issue is that it doesn't support single
+ length certificate chains for signing keys.
+
The ASN.1 library was unable to read an empty set object. This has been fixed.
+
Returning sets of critical and non-critical extensions on X.509 certificates could result in a null pointer exception if the certificate had no extensions. This has been fixed.
+
The BC JKS implementation does not follow the conventional one - it has been renamed BKS, an attempt to create a JKS keystore using the BC provider will now result in an exception.
+
The PKCS 10 generator verify(provider) method was ignoring the provider when generating the public key. This has been fixed.
+
The PKCS12 store would throw an OutOfMemoryException if passed a non-PKCS12 file. This has been fixed.
+
In the case where there was no AuthorityKeyIdentifier the PKCS12 store
+ would fail to find certificates further up the signing chain. The store now
+ uses the IssuerDN if no AuthorityKeyIdentifier is specified and the IssuerDN
+ is different from the SubjectDN,
+
PKCS10/CertificationRequestInfo objects with only a single attribute wer
+ not being handled properly. This has been fixed.
+
getExtensionValue for X.509 CRLs was returning the value of the
+ DER-Encoded octet string not the DER-Encoded octet string as required. This
+ has been fixed.
+
the IV algorithm parameters class would improperly throw an exception
+ on initialisation. This has been fixed.
+
+
2.73.3 Additional Functionality and Features
+
+
The AESWrap ciphers will now take IV's.
+
The DES-EDEWrap algorithm described in https://www.ietf.org/internet-drafts/draft-ietf-smime-key-wrap-01.txt is now supported.
+
Support for the ExtendedKeyUsageExtension and the KeyPurposeId has been added.
+
The OID based alias for DSA has been added to the JCE provider.
+
BC key stores now implement the BCKeyStore interface so you can provide your own source of randomness to a key store.
+
The ASN.1 library now supports GeneralizedTime.
+
HMACSHA256, HMACSHA384, and HMACSHA512 are now added.
+
PSS has been added to the JCE, PSS and ISO9796 signers in the lightweight api have been rewritten so they can be used incrementally. SHA256withRSA, SHA384withRSA, and SHA512withRSA have been added.
+
Base support for CMS (RFC 2630) is now provided (see CONTRIBUTORS file
+ for details).
+
X9.23 padding of MACs now works correctly with block size aligned data.
+
Loading a corrupted "UBER" key store would occasionally cause the
+appearance of hanging. This has been fixed.
+
Loading a PKCS12 store where not all certificates had PKCS9 attributes
+assigned to them would cause a NullPointerException. This has been fixed.
+
The PKCS12 store wasn't correctly recovering certificate chains of
+length less than 2 on calling the getCertificateChain method. This has been
+fixed.
+
Lone certificates were not been stored in the PKCS12 store. This has been fixed.
+
CFB and OFB modes weren't padding iv's more than 1 byte less than the
+block size of the cipher if the mode was reused with a shorter IV. This has
+been fixed.
+
IV handling and block size return values for CFB and OFB modes wasn't being handled in the same way as the Sun reference implementation. This has been fixed.
+
CertificateInfoRequests were not handling null attributes correctly. This
+has been fixed.
+
Tags for the X.509 GeneralName structure were wrongly encoded. This has been
+fixed.
+
getExtensionValue for X.509 certificates was returning the value of the
+DER-Encoded octet string not the DER-Encoded octet string as required. This has
+been fixed.
+
reset on the version 3 X.509 certificate generator was not flushing the
+extensions. This has been fixed.
+
The NetscapeCert type bits were reversed! This has been fixed.
+
+
2.74.3 Additional Functionality and Features
+
+
The lightweight API and the JCE provider now support ElGamal.
+
X509Principal, and X509Name now supports the "DC" attribute and the
+creation of directory names from vectors.
+
RSA-PSS signature padding has been added to the lightweight API.
+
EC Public/Private keys are now encoded in accordance with SEC 1. The library
+will still read older keys as well.
+
Added PKCS12-DEF a pkcs12 based key store which works around a bug in
+the Sun keytool - it always uses the default provider for creating certificates.
+
A cut down version of the Rijndael has been added that provides the functionality required to conform the the AES. It is designed to fully support FIPS-197. A fips AES wrapper (AESWrap in the JCE, AESWrapEngine in the lightweight library has also been added).
+
Elliptic curve routines now handle uncompressed points as well as the
+compressed ones.
+
+
2.74.4 Other changes
+
+
As the range of public key types supported has expanded the getPublicKey
+method on the SubjectPublicKeyInfo class is not always going to work. The
+more generic method getPublicKeyData has been added and getPublicKey now
+throws an IOException if there is a problem.
+
The PKCS12 Key Store now interoperates with the JDK key tool. Note: this does mean the the key name passed to the setKeyEntry calls has become
+significant.
+
The "int" constructor for DERInteger only supported ints up to 128. This
+has been fixed.
+
The ASN.1 input streams now handle zero-tagged zero length objects correctly.
+
+
2.75.3 Additional Functionality and Features
+
+
The JCE Provider and the lightweight API now support Serpent, CAST5, and CAST6.
+
The JCE provider and the lightweight API now has an implementation of ECIES.
+Note: this is based on a draft, don't use it for anything that needs to
+be kept long term as it may be adjusted.
+
Further work has been done on performance - mainly in the symmetric ciphers.
+
Support for the generation of PKCS10 certification requests has been added.
+
failure to pass in an RC5 parameters object now results in an exception
+at the upper level of the JCE, rather than falling over in the lightweight
+library.
+
ISO10126Padding now incorporates the correct amount of random data.
+
The PKCS12 key store wasn't picking up certificate chains properly
+when being used to write PKCS12 files. This has been fixed.
+
The Twofish engine would call System.exit if the key was too large.
+This has been fixed.
+
In some cases the ASN.1 library wouldn't handle implicit tagging properly.
+This has been fixed.
+
+
2.76.3 Additional Functionality and Features
+
+
Support for RC5-64 has been added to the JCE.
+
ISO9796-2 signatures have been added to the JCE and lightweight API.
+
A more general paddings packge for use with MACs and block ciphers had been aded to the lightweight API. MACs now allow you to specify padding.
+
X9.23 Padding has been added to the JCE and lightwieght API. The old
+PaddedBlockCipher class is now deprecated see org.bouncycastle.crypto.paddings for details.
+
SHA-256, SHA-384, and SHA-512 are now added. Note: while the public review
+period has finished, these algorithms have not yet been standardised, in the
+event that final standardisation changes the algorithms these implementations
+will be changed.
+
It's now possible to set bag attributes on items to go into a PKCS12 store,
+using the org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier interface.
+
More classses have been added to the ASN.1 package for dealing with
+certificate extensions and CRLs including a CRL generator. Note: the
+CRL generators should be regarded as under development and subject to change.
+
There's now an examples package for the JCE (in addition to the examples
+in org.bouncycastle.jce.provider.test) - org.bouncycastle.jce.examples. It
+currently consists of a class showing how to generate a PKCS12 file.
+
The X.509 CertificateFactory now includes CRL support. DER or PEM CRLs may be processed.
+
The BigInteger library has been written with a view to making it less
+resource hungry and faster - whether it's fast enough remains to be seen!
+
It wasn't possible to specify an ordering for distinguished names in
+X509 certificates. This is now supported.
+
In some circumstances stream Ciphers in the JCE would cause null pointer
+exceptions on doFinal. This has been fixed.
+
Unpadded ciphers would sometimes buffer the last block of input, even
+if it could be processed. This has been fixed.
+
The netscape certificate request class wouldn't compile under JDK 1.1. This
+has been fixed.
+
+
2.77.3 Additional Functionality and Features
+
+
ISO 9796-1 padding is now supported with RSA in the lightweight
+API and the JCE.
+
support classes have been added for reading and writing PKCS 12 files,
+including a keystore for the JCA.
+
The message digests MD4, Tiger, and RIPEMD128 have been added to the
+JCE and the lightweight API. Note: MD4 and RIPEMD128 have been added for
+compatibility purposes only - we recommend you don't use them for anything new!
+
The JDK 1.1 certificate classes didn't conform to the JDK 1.2 API as
+the collections class was not present. Thanks to a donated collections API
+this is fixed.
+
It turned out that the setOddParity method in the DESParameter class
+was indeed doing something odd but not what was intended. This is now
+fixed. Note:This will affect some PBE encryptions that were carried
+out with DES, equivalent PBE ciphers to the old PBE DES cipher can be
+accessed by prepending the work "Broken" in front of the original PBE cipher
+call. If you want an example of how to deal with this as a migration issue
+have a look in org.bouncycastle.jce.provider.JDKKeyStore lines 201-291.
+
Diffie-Hellman keys are now properly serialisable as well as
+encodable.
+
Three of the semi-weak keys in the DESParameters, and the DESKeySpec look
+up table, were incorrect. This has been fixed.
+
DESEDE key generators now accept 112 and 168 as the key sizes, as well
+as 128 and 192 (for those people who don't like to count the parity bits).
+
Providing no strength parameter is passed to the DESede key generator in
+the JCE provider, the provider now generates DESede keys in the k1-k2-k1
+format (which is compatible with the Sun reference implementation), otherwise
+you get what you ask for (3-DES or 2-DES in the minimum number of bytes).
+
Base Diffie-Hellman key agreement now works correctly for more than two
+parties.
+
Cipher.getAlgorithmParameters was returing null in cases where a cipher
+object had generated it's own IV. This has been fixed.
+
An error in the key store occasionally caused checks of entry types to
+result in a null pointer exception. This has been fixed.
+
RSA key generator in JCE now recognises RSAKeyGenerationParameterSpec.
+
Resetting and resusing HMacs in the lightweight and heavyweight libraries
+caused a NullPointer exception. This has been fixed.
+
+
2.79.3 Additional Functionality
+
+
ISO10126Padding is now recognised explicitly for block ciphers
+as well.
+
The Blowfish implementation is now somewhat faster.
+
The DESEDE key generator can now be used to generate 2-Key-DESEDE
+keys as well as 3-Key-DESEDE keys.
+
One of the weak keys in the DESParameters, and the DESKeySpec look
+up table, was incorrect. This has been fixed.
+
The PKCS12 generator was only generating the first 128-160 bits of the
+key correctly (depending on the digest used). This has been fixed.
+
The ASN.1 library was skipping explicitly tagged objects of zero length.
+This has been fixed.
+
+
2.80.3 Additional Functionality
+
+
There is now an org.bouncycastle.jce.netscape package which has
+a class in for dealing with Netscape Certificate Request objects.
+
+
2.80.4 Additional Notes
+
+Concerning the PKCS12 fix: in a few cases this may cause some backward
+compatibility issues - if this happens to you, drop us a line at
+feedback-crypto@bouncycastle.org
+and we will help you get it sorted out.
+
Signatures generated by other providers that include optional null
+parameters in the AlgorithmIdentifier are now handled correctly by the
+provider.
+
The JCE 1.2.1 states that the names of algorithms associated with the JCE
+are case insensitive. The class that matches algorithms to names now tries
+to match the name given with it's equivalent in upper case, before trying
+to match it as given. If you write a provider and include versions of your
+algorithm names in uppercase only, this JCE implementation will always
+match a getInstance regardless of the case of the algorithm passed into
+the getInstance method.
+
If the JCE API and the Provider were in a different class path, the
+class loader being used sometimes failed to find classes for JCE Ciphers, etc.
+This has been fixed.
+
An error in the ASN.1 library was causing problems serialising Diffie-Hellman keys. This has been fixed.
+
The agreement package was left out of the j2me bat file. This has been fixed.
+
The BigInteger class for 1.0 and the j2me wasn't able to generate random
+integers (prime or otherwise). This has been fixed.
+
The BigInteger class would sometimes go into a death spiral if the any
+32nd bit of an exponent was set when modPow was called. This has been fixed.
+
Cipher.getInstance would treat "//" in a transformation as a single "/".
+This has been fixed.
+
PBEWithSHAAndIDEA-CBC was throwing an exception on initialisation. This has
+been fixed.
+
The X509Name class in the asn1.x509 package wasn't initialising its local
+hash table when the hash table constructor was called. This has been fixed.
+
+
+
2.81.3 Additional Functionality
+
+
Added Elliptic Curve DSA (X9.62) - ECDSA - to provider and lightweight
+library.
+
Added Elliptic Curve basic Diffie-Hellman to provider and lightweight
+library.
+
Added DSA support to the provider and the lightweight library.
+
Added super class interfaces for basic Diffie-Hellman agreement classes
+to lightweight library.
+
The certificate generators now support ECDSA and DSA certs as well.
+
CFB and OFB modes when specified without padding would insist on input
+being block aligned. When specified without padding CFB and OFB now behave in a compatible
+fashion (a doFinal on a partial block will yield just the data that could
+be processed).
+In short, it provides another way of generating cipher text the same
+length as the plain text.
+
JDK1.2 version now works with keytool for certificate generation.
+
Certificate toString method no longer throws a null pointer exception
+if a group [3] extension has not been added.
+
Under some circumstances the NullCipher would throw a NullPointerException,
+this has been fixed.
+
Under some circumstances CipherInputStream would throw a NullPointerException, this has been fixed.
+
OpenSSL/SSLeay private key encodings would cause an exception to be thrown
+by the RSA key factory. This is now fixed.
+
The Cipher class always used the default provider even when one was specified, this has been fixed.
+
Some DES PBE algorithms did not set the parity correctly in generated keys, this has been fixed.
+
+
+
2.85.3 Additional functionality
+
+
+
Argument validation is much improved.
+
An X509KeyUsage class has been added to the JCE class to make it easier
+to specify the KeyUsage extension on X.509 certificates.
+
The library now allows creation of version 1 certificates as well.
+
+
+
3.0 Notes
+
+The J2ME is only supported under Windows.
+
+If you are trying to use the lightweight provider in a JDK 1.0 applet, you
+need to change the package names for java.math.BigInteger, java.lang.IllegalStateException, and java.security.SecureRandom
+
+The RSA test under JDK 1.0 and J2ME takes a while to run...
+
+
diff --git a/doc/specifications.html b/doc/specifications.html
new file mode 100644
index 0000000..6b7c989
--- /dev/null
+++ b/doc/specifications.html
@@ -0,0 +1,1189 @@
+
+
+Bouncy Castle Crypto Package
+
+
+
+
+
+
Bouncy Castle Crypto Package
+
+
+
+
+
+
1.0 Introduction
+The Bouncy Castle Crypto package is a Java implementation of
+cryptographic algorithms. The package is organised so that it
+contains a light-weight API suitable for use in any environment
+(including the newly released J2ME) with the additional infrastructure
+to conform the algorithms to the JCE framework.
+
+Except where otherwise stated, this software is distributed under a license
+based on the MIT X
+Consortium license. To view the license, see here.
+The OpenPGP library also includes a modified BZIP2 library which
+is licensed under the Apache Software License, Version 2.0.
+
+
+If you have the full package you will have six jar files, bcprov*.jar
+which contains the BC provider, jce-*.jar which contains
+the JCE provider, clean room API, and bcmail*.jar which contains the
+mail API.
+
+Note: if you are using JDK 1.0, you will just find a class hierarchy in
+the classes directory.
+
+To view examples, look at the test programs in the packages:
+
+
org.bouncycastle.crypto.test
+
org.bouncycastle.jce.provider.test
+
+
+To verify the packages, run the following Java programs with the
+appropriate classpath:
+
+Some of the algorithms in the Bouncy Castle APIs are patented in some
+places. It is upon the user of the library to be aware of what the
+legal situation is in their own situation, however we have been asked
+to specifically mention the patents below, in the following terms, at
+the request of the patent holder.
+
+The BC distribution contains implementations of EC MQV as described in RFC 5753, "Use of ECC Algorithms in CMS". In line with the conditions in:
+
+We state, where EC MQV has not otherwise been disabled or removed:
+
+"The use of this product or service is subject to the reasonable, non-discriminatory terms in the Intellectual Property Rights (IPR) Disclosures of Certicom Corp. at the IETF for Use of Elliptic Curve Cryptography (ECC) Algorithms in Cryptographic Message Syntax (CMS) implemented in the product or service."
+
+
+
3.0 System Properties
+The Bouncy Castle provider can make use of the following two system properties:
+
+
org.bouncycastle.ec.disable_mqv - setting this property to true will disable support for EC MQV in the provider.
+
org.bouncycastle.pkcs1.not_strict - some other providers of cryptography services fail to produce PKCS1 encoded block that are the correct length. Setting this property to true will relax the conformance check on the block length.
+
+
4.0 Specifications
+
+
+
clean room implementation of the JCE API
+
light-weight cryptographic API consisting of support for
+
+
BlockCipher
+
BufferedBlockCipher
+
AsymmetricBlockCipher
+
BufferedAsymmetricBlockCipher
+
StreamCipher
+
BufferedStreamCipher
+
KeyAgreement
+
IESCipher
+
Digest
+
Mac
+
PBE
+
Signers
+
+
JCE compatible framework for a Bouncy Castle provider "BC".
+
JCE compatible framework for a Bouncy Castle post-quantum provider "BCPQC".
+
+
+
5.0 Light-weight API
+
+
+This API has been specifically developed for those circumstances
+where the rich API and integration requirements of the JCE are
+not required.
+
+However as a result, the light-weight API requires more effort
+and understanding on the part of a developer to initialise and
+utilise the algorithms.
+
+
5.1 Example
+
+
To utilise the light-weight API in a program, the fundamentals
+are as follows;
+
+
+
+ /*
+ * This will use a supplied key, and encrypt the data
+ * This is the equivalent of DES/CBC/PKCS5Padding
+ */
+ BlockCipher engine = new DESEngine();
+ BufferedBlockCipher cipher = new PaddedBlockCipher(new CBCCipher(engine));
+
+ byte[] key = keyString.getBytes();
+ byte[] input = inputString.getBytes();
+
+ cipher.init(true, new KeyParameter(key));
+
+ byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
+
+ int outputLen = cipher.processBytes(input, 0, input.length, cipherText, 0);
+ try
+ {
+ cipher.doFinal(cipherText, outputLen);
+ }
+ catch (CryptoException ce)
+ {
+ System.err.println(ce);
+ System.exit(1);
+ }
+
+
+
+
5.2 Algorithms
+
+
The light-weight API has built in support for the following:
+
+
Symmetric (Block)
+
+
+The base interface is BlockCipher and has the following
+implementations which match the modes the block cipher can
+be operated in.
+
+
+
Name
Constructor
Notes
+
BufferedBlockCipher
BlockCipher
+
CBCBlockCipher
BlockCipher
+
CFBBlockCipher
BlockCipher, block size (in bits)
+
GCFBlockCipher
BlockCipher
GOST CFB mode with CryptoPro key meshing.
+
EAXBlockCipher
BlockCipher
+
OCBBlockCipher
BlockCipher
+
OFBBlockCipher
BlockCipher, block size (in bits)
+
SICBlockCipher
BlockCipher, block size (in bits)
Also known as CTR mode
+
KCTRBlockCipher
BlockCipher, block size (in bits)
DSTU7624 CTR mode
+
OpenPGPCFBBlockCipher
BlockCipher
+
GOFBBlockCipher
BlockCipher
GOST OFB mode
+
+
+
+The base interface for AEAD (Authenticated Encryption Associated Data) modes is AEADBlockCipher
+and has the following implemenations.
+
+
+
Name
Constructor
Notes
+
CCMBlockCipher
BlockCipher
Packet mode - requires all data up front.
+
EAXBlockCipher
BlockCipher
+
CCMBlockCipher
BlockCipher
Packet mode - requires all data up front.
+
GCMBlockCipher
BlockCipher
Packet mode - NIST SP 800-38D.
+
GCMSIVBlockCipher
BlockCipher
Packet mode - RFC 8452.
+
KCCMBlockCipher
BlockCipher
DSTU 7624 Packet mode - requires all data up front.
+
OCBBlockCipher
BlockCipher
+
ChaCha20Poly1305
AEADCipher
+
+
+
+
+BufferedBlockCipher has a further sub-classes
+
+
+
Name
Constructor
Notes
+
PaddedBufferedBlockCipher
BlockCipher
a buffered block cipher that can use padding - default PKCS5/7 padding
+
CTSBlockCipher
BlockCipher
Cipher Text Stealing
+
NISTCTSBlockCipher
BlockCipher
Cipher Text Stealing - NIST mode set.
+
+
+
The following paddings can be used with the PaddedBufferedBlockCipher.
+
+
+
Name
Description
+
PKCS7Padding
PKCS7/PKCS5 padding
+
ISO10126d2Padding
ISO 10126-2 padding
+
X932Padding
X9.23 padding
+
ISO7816d4Padding
ISO 7816-4 padding (ISO 9797-1 scheme 2)
+
ZeroBytePadding
Pad with Zeros (not recommended)
+
+
+
The following cipher engines are implemented that can be
+used with the above modes.
+
+
+
Name
KeySizes (in bits)
Block Size
Notes
+
AESEngine
0 .. 256
128 bit
+
AESWrapEngine
0 .. 256
128 bit
Implements FIPS AES key wrapping
+
AsconEngine
128
128 bit
AEAD Cipher
+
BlowfishEngine
0 .. 448
64 bit
+
CamelliaEngine
128, 192, 256
128 bit
+
CamelliaWrapEngine
128, 192, 256
128 bit
+
CAST5Engine
0 .. 128
64 bit
+
CAST6Engine
0 .. 256
128 bit
+
DESEngine
64
64 bit
+
DESedeEngine
128, 192
64 bit
+
DESedeWrapEngine
128, 192
64 bit
Implements Draft IETF DESede key wrapping
+
DSTU7624Engine
128, 256, 512
128/256/512 bit
DSTU7624 Block Cipher
+
DSTU7624WrapEngine
128, 256, 512
128/256/512 bit
DSTU7624 key wrapper
+
ElephantEngine
128
128 bit
AEAD Cipher
+
GOST28147Engine
256
64 bit
Has a range of S-boxes
+
GOST3412_2015Engine
256
128 bit
+
IDEAEngine
128
64 bit
+
ISAPEngine
128
128 bit
AEAD Cipher
+
LEAEngine
128
128/192/256 bit
+
NoekeonEngine
128
128 bit
+
PhotonBeetleEngine
128
128 bit
AEAD Cipher
+
RC2Engine
0 .. 1024
64 bit
+
RC532Engine
0 .. 128
64 bit
Uses a 32 bit word
+
RC564Engine
0 .. 128
128 bit
Uses a 64 bit word
+
RC6Engine
0 .. 256
128 bit
+
RijndaelEngine
0 .. 256
128 bit, 160 bit, 192 bit, 224 bit, 256 bit
+
SEEDEngine
128
128 bit
+
SEEDWrapEngine
128
128 bit
+
Shacal2Engine
512
256 bit
+
SerpentEngine
128, 192, 256
128 bit
+
SkipjackEngine
0 .. 128
64 bit
+
SM4Engine
128
128 bit
+
SparkleEngine
128
128 bit
AEAD Cipher
+
TEAEngine
128
64 bit
+
ThreefishEngine
256/512/1024
256 bit/512 bit/1024 bit
Tweakable block cipher
+
TwofishEngine
128, 192, 256
128 bit
+
XoodyakEngine
128
128 bit
AEAD Cipher
+
XTEAEngine
128
64 bit
+
+
+
The following additional key wrapping algorithms are also available: RFC3211WrapEngine, RFC3394WrapEngine, and RFC5649WrapEngine.
+
+
Symmetric (Stream)
+
+
+The base interface is StreamCipher and has the following
+implementations which match the modes the stream cipher can
+be operated in.
+
+
+
+
Name
Constructor
Notes
+
BlockStreamCipher
BlockCipher
+
+
The following cipher engines are implemented that can be
+used with the above modes.
+
+
+
+
Name
KeySizes (in bits)
Notes
+
RC4Engine
40 .. 2048
+
HC128Engine
128
+
HC256Engine
256
+
ChaChaEngine
128/256
64 bit IV
+
Salsa20Engine
128/256
64 bit IV
+
XSalsa20Engine
256
192 bit IV
+
ISAACEngine
32 .. 8192
+
VMPCEngine
8 .. 6144
+
Grainv1Engine
80
64 bit IV
+
Grain128Engine
128
96 bit IV
+
Zuc128Engine
128
128 bit IV
+
Zuc256Engine
256
200 bit IV
+
+
+
Block Asymmetric
+
+
+The base interface is AsymmetricBlockCipher and has the following
+implementations which match the modes the cipher can be operated in.
+
+
+
+
Name
Constructor
Notes
+
BufferedAsymmetricBlockCipher
AsymmetricBlockCipher
+
OAEPEncoding
AsymmetricBlockCipher
+
PKCS1Encoding
AsymmetricBlockCipher
+
ISO9796d1Encoding
AsymmetricBlockCipher
ISO9796-1
+
+
+
The following cipher engines are implemented that can be
+used with the above modes.
+
+
+
Name
KeySizes (in bits)
Notes
+
RSAEngine
any multiple of 8 large enough for the encoding.
+
ElGamalEngine
any multiple of 8 large enough for the encoding.
+
NTRUEngine
any multiple of 8 large enough for the encoding.
+
+
The following asymmetric ciphers are also supported and allow variable block sizes:
+
+
IESEngine
+
SM2Engine
+
+
+
+
Digest
+
+
+The base interface is Digest and has the following
+implementations
+
+
+
Name
Output (in bits)
Notes
+
AsconDigest
256
+
AsconXof
XOF
+
Blake2bDigest
224, 256, 384, 512
+
Blake3Digest
224, 256, 384, 512
+
CSHAKEDigest
XOF
SP 800-185, based on SHAKE128/SHAKE256
+
DSTU7564Digest
256, 384, 512
+
ISAPDigest
256
+
Kangaroo
XOF
Built on Keccak-p
+
KeccakDigest
224, 256, 288, 384, 512
+
MD2Digest
128
+
MD4Digest
128
+
MD5Digest
128
+
ParallelHash
XOF
XOF based on cSHAKE (SP 800-185).
+
PhotonBeetleDigest
256
+
RipeMD128Digest
128
basic RipeMD
+
RipeMD160Digest
160
enhanced version of RipeMD
+
RipeMD256Digest
256
expanded version of RipeMD128
+
RipeMD320Digest
320
expanded version of RipeMD160
+
SHA1Digest
160
+
SHA224Digest
224
FIPS 180-2
+
SHA256Digest
256
FIPS 180-2
+
SHA384Digest
384
FIPS 180-2
+
SHA512Digest
512
FIPS 180-2
+
SHA3Digest
224, 256, 384, 512
+
SHAKEDigest
128, 256
cSHAKE primitive also supported.
+
SkeinDigest
any byte length
256 bit, 512 bit and 1024 state sizes. Additional parameterisation using SkeinParameters.
+
SM3Digest
256
The SM3 Digest.
+
SparkleDigest
256
+
TigerDigest
192
The Tiger Digest.
+
TupleHash
XOF
XOF based on cSHAKE (SP 800-185).
+
GOST3411Digest
256
The GOST-3411 Digest.
+
GOST3411_2012_256Digest
256
The GOST-3411-2012-256 Digest.
+
GOST3411_2012_512Digest
512
The GOST-3411-2012-512 Digest.
+
WhirlpoolDigest
512
The Whirlpool Digest.
+
Haraka256Digest
256
Haraka V2 - 256 bit input version.
+
Haraka512Digest
256
Haraka V2 - 512 bit input version.
+
XoodyakDigest
256
+
+
+
MAC
+
+
+The base interface is Mac and has the following
+implementations
+
+
+
Name
Output (in bits)
Notes
+
CBCBlockCipherMac
blocksize/2 unless specified
+
CFBBlockCipherMac
blocksize/2, in CFB 8 mode, unless specified
+
CMac
24 to cipher block size bits
Usable with block ciphers, NIST SP 800-38B.
+
GMac
32 to 128 bits
Usable with GCM mode ciphers, defined for AES, NIST SP 800-38D.
+
GOST28147Mac
32 bits
+
ISO9797Alg3Mac
multiple of 8 bits up to underlying cipher size.
+
HMac
digest length
+
DSTU7564
256, 384, 512 bits
+
DSTU7624
128, 256, 512 bits
+
Poly1305
128 bits
Usable with 128 bit block ciphers. Use Poly1305KeyGenerator to generate keys.
+
SkeinMac
any byte length
256 bit, 512 bit and 1024 state size variants. Additional parameterisation using SkeinParameters.
+
SipHash
64 bits
+
SipHash128
128 bits
+
VMPCMac
160 bits
+
Zuc128Mac
32 bits
+
Zuc256Mac
32, 64, 128 bits
+
+
+
PBE and Password Hashing
+
+
+The base class is PBEParametersGenerator and has the following
+sub-classes
+
+
+
Name
Constructor
Notes
+
PKCS5S1ParametersGenerator
Digest
+
PKCS5S2ParametersGenerator
Uses SHA1/Hmac as defined
+
PKCS12ParametersGenerator
Digest
+
OpenSSLPBEParametersGenerator
Uses MD5 as defined
+
+
+The following password hashing schemes are supported:
+
+
+
Name
Constructor
Notes
+
Argon2
+
BCrypt
+
OpenBSDBcyrpt
+
SCrypt
+
+
+
IESCipher
+
+The IES cipher is based on the one described in IEEE P1363a (draft 10), for
+use with either traditional Diffie-Hellman or Elliptic Curve Diffie-Hellman.
+
+Note: At the moment this is still a draft, don't use it for anything
+that may be subject to long term storage, the key values produced may well
+change as the draft is finalised.
+
+
+
Commitments
+
+The base class is Committer and has the following
+sub-classes
+
+
+
Name
Notes
+
HashCommitter
Hash commitment algorithm described in Usenix RPC MixNet Paper (2002)
+
+
+
Key Agreement
+
+Two versions of Diffie-Hellman key agreement are supported, the basic
+version, and one for use with long term public keys. Two versions of
+key agreement using Elliptic Curve cryptography are also supported,
+standard Diffie-Hellman key agreement and standard key agreement with
+co-factors.
+
+
+The agreement APIs are in the org.bouncycastle.crypto.agreement package.
+Classes for generating Diffie-Hellman parameters can be found in the
+org.bouncycastle.crypto.params and org.bouncycastle.crypto.generators packages.
+
+
+
Key Encapsulation Mechanisms
+
+The first non-post-quantum set use the EncapsulatedSecretGenerator and EncapsulatedSecretGenerator interfaces.
+
+
+
+
Name
Notes
+
+
+
RSA
RSA-KEM from ISO 18033-2, implemented in RSAKEMExtractor and RSAKEMGenerator
+
ECIES
ECIES-KEM from ISO 18033-2, implemented in ECIESKEMExtractor and ECIESKEMGenerator
+
+
+
+The second, post-quantum set use EncapsulatedSecretGenerator and EncapsulatedSecretGenerator.
+
+DSA, ECDSA, ISO-9796-2, GOST-3410-94, GOST-3410-2001, GOST-3410-2012, DSTU-4145-2002, and RSA-PSS are supported by the org.bouncycastle.crypto.signers
+package. Note: as these are light weight classes, if you need to use SHA1 or GOST-3411
+(as defined in the relevant standards) you'll also need to make use of the appropriate
+digest class in conjunction with these.
+Classes for generating DSA and ECDSA parameters can be found in the
+org.bouncycastle.crypto.params and org.bouncycastle.crypto.generators packages.
+
+
+
5.4 Elliptic Curve Transforms.
+
+
+The org.bouncycastle.crypto.ec package contains implementations for a variety of EC cryptographic transforms such as EC ElGamal.
+
+
+
5.5 TLS/DTLS
+
+
+The org.bouncycastle.crypto.tls package contains implementations for TLS 1.1, 1.2 and DTLS 1.0, 1.2.
+
+
+
5.6 Deterministic Random Bit Generators (DRBG) and SecureRandom wrappers
+
+
+The org.bouncycastle.crypto.prng package contains implementations for a variety of bit generators including those from SP 800-90A and X9.31, as well as builders for SecureRandom objects based around them.
+
+
5.7 ASN.1 package
+
+
The light-weight API has direct interfaces into a package capable of
+reading and writing DER-encoded ASN.1 objects and for the generation
+of X.509 V3 certificate objects and PKCS12 files. BER InputStream and
+OutputStream classes are provided as well.
+
+
6.0 Bouncy Castle Provider
+
+
The Bouncy Castle provider is a JCE compliant provider that
+is a wrapper built on top of the light-weight API. The main provider is referred to with the name "BC", the post quantum provider is indicated by "BCPQC".
+
+The advantage for writing application code that uses the
+provider interface to cryptographic algorithms is that the
+actual provider used can be selected at run time. This
+is extremely valuable for applications that may wish to
+make use of a provider that has underlying hardware for
+cryptographic computation, or where an application may have
+been developed in an environment with cryptographic export
+controls.
+
+
+
6.1 Example
+
+
To utilise the JCE provider in a program, the fundamentals
+are as follows;
+
+
+
+ /*
+ * This will generate a random key, and encrypt the data
+ */
+ Key key;
+ KeyGenerator keyGen;
+ Cipher encrypt;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try
+ {
+ // "BC" is the name of the BouncyCastle provider
+ keyGen = KeyGenerator.getInstance("DES", "BC");
+ keyGen.init(new SecureRandom());
+
+ key = keyGen.generateKey();
+
+ encrypt = Cipher.getInstance("DES/CBC/PKCS5Padding", "BC");
+ }
+ catch (Exception e)
+ {
+ System.err.println(e);
+ System.exit(1);
+ }
+
+ encrypt.init(Cipher.ENCRYPT_MODE, key);
+
+ bOut = new ByteArrayOutputStream();
+ cOut = new CipherOutputStream(bOut, encrypt);
+
+ cOut.write("plaintext".getBytes());
+ cOut.close();
+
+ // bOut now contains the cipher text
+
+
+
+The provider can also be configured as part of your environment via static registration
+by adding an entry to the java.security properties file (found in $JAVA_HOME/jre/lib/security/java.security, where $JAVA_HOME is the location of your JDK/JRE distribution). You'll find detailed
+instructions in the file but basically it comes down to adding a line:
+
Where <n> is the preference you want the provider at (1 being the most prefered).
+
Where you put the jar is up to mostly up to you, although with jdk1.3 and
+jdk1.4 the best (and in some cases only) place to have it is in $JAVA_HOME/jre/lib/ext. Note: under Windows there will normally be a JRE and a JDK install of Java if you think you have installed it correctly and it still doesn't work chances are you have added the provider to the installation not being used.
+
+Note: with JDK 1.4 and later you will need to have installed the unrestricted policy
+files to take full advantage of the provider. If you do not install the policy files you are likely
+to get something like the following:
+
+
+ java.lang.SecurityException: Unsupported keysize or algorithm parameters
+ at javax.crypto.Cipher.init(DashoA6275)
+
+
+The policy files can be found at the same place you downloaded the JDK.
+
+
6.2 Algorithms
+
+
Symmetric (Block)
+
+
Modes:
+
+
ECB
+
CBC
+
OFB(n)
+
CFB(n)
+
SIC (also known as CTR)
+
OpenPGPCFB
+
CTS (equivalent to CBC/WithCTS)
+
FF1
+
FF3-1
+
GOFB
+
GCFB
+
CCM (AEAD)
+
EAX (AEAD)
+
GCM (AEAD)
+
GCM-SIV (AEAD)
+
OCB (AEAD)
+
+
+
+Where (n) is a multiple of 8 that gives the blocksize in bits,
+eg, OFB8. Note that OFB and CFB mode can be used with plain text that
+is not an exact multiple of the block size if NoPadding has been specified.
+
+All AEAD (Authenticated Encryption Associated Data) modes support
+Additional Authentication Data (AAD) using the Cipher.updateAAD()
+methods added in Java SE 7.
+On Java 7 and later, AEAD modes will throw javax.crypto.AEADBadTagException on an authentication failure.
+On earlier version of Java, javax.crypto.BadPaddingException is thrown.
+
+
+
+Padding Schemes:
+
+
No padding
+
PKCS5/7
+
ISO10126/ISO10126-2
+
ISO7816-4/ISO9797-1
+
X9.23/X923
+
TBC
+
ZeroByte
+
withCTS (if used with ECB mode)
+
+
+
+When placed together this gives a specification for an algorithm
+as;
+
+
DES/CBC/X9.23Padding
+
DES/OFB8/NoPadding
+
IDEA/CBC/ISO10126Padding
+
IDEA/CBC/ISO7816-4Padding
+
SKIPJACK/ECB/PKCS7Padding
+
DES/ECB/WithCTS
+
+
+
+Note: default key sizes are in bold.
+
+
+
Name
KeySizes (in bits)
Block Size
Notes
+
AES
0 .. 256 (192)
128 bit
+
AESWrap
0 .. 256 (192)
128 bit
A FIPS AES key wrapper
+
ARIA
0 .. 256 (192)
128 bit
+
ARIAWrap
0 .. 256 (192)
128 bit
An ARIA key wrapper (based on RFC 5649)
+
Blowfish
0 .. 448 (448)
64 bit
+
Camellia
128, 192, 256
128 bit
+
CamelliaWrap
128, 192, 256
128 bit
+
CAST5
0 .. 128(128)
64 bit
+
CAST6
0 .. 256(256)
128 bit
+
DES
64
64 bit
+
DESede
128, 192
64 bit
+
DESedeWrap
128, 192
128 bit
A Draft IETF DESede key wrapper
+
DSTU7624
128, 256, 512
128/256/512 bit
DSTU7624 Block Cipher
+
DSTU7624Wrap
128, 256, 512
128/256/512 bit
DSTU7624 key wrapper
+
GCM
128, 192, 256(192)
AEAD Mode Cipher
Galois/Counter Mode, as defined in NIST Special Publication SP 800-38D.
+
GOST28147
256
64 bit
+
IDEA
128 (128)
64 bit
+
Noekeon
128(128)
128 bit
+
RC2
0 .. 1024 (128)
64 bit
+
RC5
0 .. 128 (128)
64 bit
Uses a 32 bit word
+
RC5-64
0 .. 256 (256)
128 bit
Uses a 64 bit word
+
RC6
0 .. 256 (128)
128 bit
+
Rijndael
0 .. 256 (192)
128 bit
+
SEED
128(128)
128 bit
+
SEEDWrap
128(128)
128 bit
+
Serpent
128, 192, 256 (256)
128 bit
+
Skipjack
0 .. 128 (128)
64 bit
+
SM4
128(128)
128 bit
+
TEA
128 (128)
64 bit
+
Threefish-256
256
256 bit
+
Threefish-512
512
512 bit
+
Threefish-1024
1024
1024 bit
+
Twofish
128, 192, 256 (256)
128 bit
+
XTEA
128 (128)
64 bit
+
+
+
Symmetric (Stream)
+
+
+Note: default key sizes are in bold.
+
+
+
Name
KeySizes (in bits)
Notes
+
RC4
40 .. 2048 bits (128)
+
HC128
(128)
+
HC256
(256)
+
ChaCha
128/256
64 bit IV
+
Salsa20
128/256
64 bit IV
+
XSalsa20
256
182 bit IV
+
VMPC
128/6144(128)
+
Grainv1
80
64 bit IV
+
Grain128
128
96 bit IV
+
Grain128AEAD
128
96 bit IV
+
Zuc128
128
128 bit IV
+
Zuc256
256
200 bit IV
+
+
+
Block Asymmetric
+
+
Encoding:
+
+
OAEP - Optimal Asymmetric Encryption Padding
+
PCKS1 - PKCS v1.5 Padding
+
ISO9796-1 - ISO9796-1 edition 1 Padding
+
+
Note: except as indicated in PKCS 1v2 we recommend you use OAEP, as
+mandated in X9.44.
+
+
+When placed together with RSA this gives a specification for an algorithm
+as;
+
+
RSA/NONE/NoPadding
+
RSA/NONE/PKCS1Padding
+
RSA/NONE/OAEPWithMD5AndMGF1Padding
+
RSA/NONE/OAEPWithSHA1AndMGF1Padding
+
RSA/NONE/OAEPWithSHA224AndMGF1Padding
+
RSA/NONE/OAEPWithSHA256AndMGF1Padding
+
RSA/NONE/OAEPWithSHA384AndMGF1Padding
+
RSA/NONE/OAEPWithSHA512AndMGF1Padding
+
RSA/NONE/OAEPWithSHA3-224AndMGF1Padding
+
RSA/NONE/OAEPWithSHA3-256AndMGF1Padding
+
RSA/NONE/OAEPWithSHA3-384AndMGF1Padding
+
RSA/NONE/OAEPWithSHA3-512AndMGF1Padding
+
RSA/NONE/ISO9796-1Padding
+
+
+
+
Name
KeySizes (in bits)
Notes
+
RSA
any multiple of 8 bits large enough for the encryption(2048)
+
ElGamal
any multiple of 8 bits large enough for the encryption(1024)
+
+
+
Key Agreement
+
+
+Diffie-Hellman key agreement is supported using the "DH", "DHU" (Diffie-Hellman Unified", "ECDH",
+"ECCDH" (EC Cofactor DH), "ECKAEG" (BSI EC KAEG key agreement"), "ECMQV" and "ECCDHU" (EC Cofactor DH Unified) key agreement instances and their variations. Key exchange, which also uses the KeyAgreement API is supported by "NH" (the NewHope algorithm (BCPQC)). SM2 key exchange is currently supported in the lightweight API.
+
+
+Support is provided for the standard SEC algorithm set for EC. Names appear
+in the form of [Agreement]with[KDF PRF Digest][KDF type]. For example:
+
+
"ECCDHwithSHA256KDF" which represents EC cofactor DH using the X9.63 KDF with SHA256 as the PRF
+
"ECMQVwithSHA1CKDF" which represents EC MQV using the concetantion KDF with SHA1 as the PRF
+
+
+Note: with basic "DH" only the basic algorithm fits in with the JCE API, if
+you're using long-term public keys you may want to look at the light-weight
+API, there are also additional JCE support classes for UserKeyingMaterial and MQVParameters in the org.bouncycastle.jcajce.spec package.
+
+
Key Encapsulation Mechanisms
+
+
+
+
Name
ParameterSpec Class
Notes
+
+
+
CMCE
CMCEParameterSpec
Class McEliece (NIST Alternate Candidate)
+
Frodo
FrodoParameterSpec
FrodoKEM (NIST Alternate Candidate)
+
SABER
SABERParameterSpec
SABER (NIST Finalist)
+
+
+
+If used for key wrapping via the Cipher class, you will also need to make use of the KEMParameterSpec class to specify a symmetric wrapping algorithm.
+
+
+If access to the shared secret is required, KeyGenerator implementations can also be used in conjuction with the KEMGenerateSpec and the KEMExtractSpec which return the shared secret directly.
+
+
ECIES
+
+An implementation of ECIES (stream mode) as described in IEEE P 1363a. This now based more formally on Victor Shoup's paper and should be compatible with the implementation in Crypto++ (version 6 onwards).
+
+
Digest
+
+
+
Name
Output (in bits)
Notes
+
Blake2b-160
160
+
Blake2b-256
256
+
Blake2b-384
384
+
Blake2b-512
512
+
Blake2s-128
128
+
Blake2s-160
160
+
Blake2s-224
224
+
Blake2s-256
256
+
Blake3-256
256
+
DSTU7564-256
256
+
DSTU7564-384
384
+
DSTU7564-512
512
+
GOST3411
256
+
GOST3411-2012-256
256
+
GOST3411-2012-512
512
+
Haraka-256
256
+
Haraka-512
256
+
Keccak-224
224
+
Keccak-288
288
+
Keccak-256
256
+
Keccak-384
384
+
Keccak-512
512
+
MD2
128
+
MD4
128
+
MD5
128
+
RipeMD128
128
basic RipeMD
+
RipeMD160
160
enhanced version of RipeMD
+
RipeMD256
256
expanded version of RipeMD128
+
RipeMD320
320
expanded version of RipeMD160
+
SHA1
160
+
SHA-224
224
FIPS 180-2
+
SHA-256
256
FIPS 180-2
+
SHA-384
384
FIPS 180-2
+
SHA-512
512
FIPS 180-2
+
SHA3-224
224
FIPS 202
+
SHA3-256
256
FIPS 202
+
SHA3-384
384
FIPS 202
+
SHA3-512
512
FIPS 202
+
Skein-256-*
128, 160, 224, 256
e.g. Skein-256-160
+
Skein-512-*
128, 160, 224, 256, 384, 512
e.g. Skein-512-256
+
Skein-1024-*
384, 512, 1024
e.g. Skein-1024-1024
+
SM3
256
+
Tiger
192
+
Whirlpool
512
+
+
+
+
MAC
+
+
+
Name
Output (in bits)
Notes
+
Any MAC based on a block cipher, CBC (the default) and CFB modes.
half the cipher's block size (usually 32 bits)
+
*-GMAC
32 to 128 bits
Usable with GCM mode ciphers, defined for AES, NIST SP 800-38D. e.g. AES-GMAC.
+
VMPC-MAC
128
+
HMac-GOST3411
256
+
HMac-GOST3411-2012-256
256
+
HMac-GOST3411-2012-512
512
+
HMac-KECCAK224
224
+
HMac-KECCAK256
256
+
HMac-KECCAK288
288
+
HMac-KECCAK384
384
+
HMac-KECCAK512
512
+
HMac-MD2
128
+
HMac-MD4
128
+
HMac-MD5
128
+
HMac-RipeMD128
128
+
HMac-RipeMD160
160
+
HMac-SHA1
160
+
HMac-SHA224
224
+
HMac-SHA256
256
+
HMac-SHA384
384
+
HMac-SHA512
512
+
HMac-SHA3-224
224
+
HMac-SHA3-256
256
+
HMac-SHA3-384
384
+
HMac-SHA3-512
512
+
HMAC-Skein-256-*
128, 160, 224, 256
e.g. HMAC-Skein-256-160
+
HMAC-Skein-512-*
128, 160, 224, 256, 384, 512
e.g. HMAC-Skein-512-256
+
HMAC-Skein-1024-*
384, 512, 1024
e.g. HMAC-Skein-1024-1024
+
Siphash-2-4 (SipHash)
64
+
Siphash-4-8
64
+
Siphash128-2-4 (SipHash128)
128
+
Skein-MAC-256-*
128, 160, 224, 256
e.g. Skein-MAC-256-160
+
Skein-MAC-512-*
128, 160, 224, 256, 384, 512
e.g. Skein-MAC-512-256
+
Skein-MAC-1024-*
384, 512, 1024
e.g. Skein-MAC-1024-1024
+
HMac-Tiger
192
+
Poly1305-*
128
Defined for recent 128 bit block ciphers, e.g. Poly1305-AES, Poly1305-Serpent
PKCS5S2, any HMac, any symmetric Cipher, ASCII, UTF8
+
PKCS12, any Digest, any symmetric Cipher, Unicode
+
+
+
+Defined in Bouncy Castle JCE Provider
+
+
Name
Key Generation Scheme
Key Length (in bits)
Char to Byte conversion
+
PBEWithMD2AndDES
PKCS5 Scheme 1
64
8 bit chars
+
PBEWithMD2AndRC2
PKCS5 Scheme 1
128
8 bit chars
+
PBEWithMD5AndDES
PKCS5 Scheme 1
64
8 bit chars
+
PBEWithMD5AndRC2
PKCS5 Scheme 1
128
8 bit chars
+
PBEWithSHA1AndDES
PKCS5 Scheme 1
64
8 bit chars
+
PBEWithSHA1AndRC2
PKCS5 Scheme 1
128
8 bit chars
+
PBKDF2WithHmacSHA1
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA1AndUTF8
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA1And8bit
PKCS5 Scheme 2
variable
8 bit chars
+
PBKDF2WithHmacSHA224
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA256
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA384
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA512
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA3-224
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA3-256
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA3-384
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSHA3-512
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacGOST3411
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBKDF2WithHmacSM3
PKCS5 Scheme 2
variable
UTF-8 chars
+
PBEWithSHAAnd2-KeyTripleDES-CBC
PKCS12
128
16 bit chars
+
PBEWithSHAAnd3-KeyTripleDES-CBC
PKCS12
192
16 bit chars
+
PBEWithSHAAnd128BitRC2-CBC
PKCS12
128
16 bit chars
+
PBEWithSHAAnd40BitRC2-CBC
PKCS12
40
16 bit chars
+
PBEWithSHAAnd128BitRC4
PKCS12
128
16 bit chars
+
PBEWithSHAAnd40BitRC4
PKCS12
40
16 bit chars
+
PBEWithSHAAndTwofish-CBC
PKCS12
256
16 bit chars
+
PBEWithSHAAndIDEA-CBC
PKCS12
128
16 bit chars
+
+
+
6.3 Certificates
+
+The Bouncy Castle provider will read X.509 certficates (v2 or v3) as per the examples in
+the java.security.cert.CertificateFactory class. They can be provided either
+in the normal PEM encoded format, or as DER binaries.
+
+The CertificateFactory will also read X.509 CRLs (v2) from either PEM or DER encodings.
+
+In addition to the classes in the org.bouncycastle.asn1.x509 package for certificate, CRLs, and OCSP, CRMF, and CMP message
+generation a more JCE "friendly" class is provided in the package org.bouncycastle.cert. The JCE "friendly" classes found in the jcajce
+ subpackages support RSA, DSA, GOST, DTSU, and EC-DSA.
+
+
6.4 Keystore
+
+The Bouncy Castle package has four implementation of a keystore.
+
+The first "BKS" is a keystore that will work with the keytool in the same
+fashion as the Sun "JKS" keystore. The keystore is resistent to tampering
+but not inspection.
+
+The second, Keystore.BouncyCastle, or Keystore.UBER will only work with the keytool
+if the password is provided on the command line, as the entire keystore
+is encrypted
+with a PBE based on SHA1 and Twofish. PBEWithSHAAndTwofish-CBC.
+This makes the entire keystore resistant to tampering and inspection,
+and forces verification.
+The Sun JDK provided keytool will attempt to load a keystore even if no
+password is given,
+this is impossible for this version. (One might wonder about going to all
+this trouble and then having the password on the command line! New keytool
+anyone?).
+
+In the first case, the keys are encrypted with 3-Key-TripleDES.
+
+The third is a PKCS12 compatible keystore. PKCS12 provides a slightly
+different situation from the regular key store, the keystore password is
+currently the only password used for storing keys. Otherwise it supports
+all the functionality required for it to be used with the keytool. In some
+situations other libraries always expect to be dealing with Sun certificates,
+if this is the case use PKCS12-DEF, and the certificates produced by the
+key store will be made using the default provider. In the default case PKCS12 uses 3DES for key protection and 40 bit RC2 for protecting the certificates. It is also possible to use 3DES for both by using PKCS12-3DES-3DES or PKCS12-DEF-3DES-3DES as the KeyStore type.
+
+There is an example program that produces PKCS12 files suitable for
+loading into browsers. It is in the package
+org.bouncycastle.jce.examples.
+
+The fourth is the BCFKS key store which is a FIPS compliant key store which is also designed for general key storage and based on ASN.1. This key store type is encrypted and supports the use of SCRYPT and the storage of some symmetric key types.
+
+
6.5 Additional support classes for Elliptic Curve.
+
+There are no classes for supporting EC in the JDK prior to JDK 1.5. If you are using
+an earlier JDK you can find classes for using EC in the following
+packages:
+
+
org.bouncycastle.jce.spec
+
org.bouncycastle.jce.interfaces
+
org.bouncycastle.jce
+
+
+
7.0 BouncyCastle S/MIME
+
+To be able to fully compile and utilise the BouncyCastle S/MIME
+package (including the test classes) you need the jar files for
+the following APIs.
+
+ 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").
+
+
+ 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.
+