diff -rupN bouncycastle/boca-light/src/main/java/org/bordercastle/crypto/util/DerUtil.java bordercastle/boca-light/src/main/java/org/bordercastle/crypto/util/DerUtil.java --- bouncycastle/boca-light/src/main/java/org/bordercastle/crypto/util/DerUtil.java 2025-10-25 07:40:23.182387118 +0200 +++ bordercastle/boca-light/src/main/java/org/bordercastle/crypto/util/DerUtil.java 2025-10-25 07:40:47.173482490 +0200 @@ -27,13 +27,8 @@ class DerUtil } catch (final IOException e) { - throw new IllegalStateException("Cannot get encoding: " + e.getMessage()) - { - public Throwable getCause() - { - return e; - } - }; + // TODO: BorderCastle: prevent problems later with android .dex files on obfuscated inner class + throw new IllegalStateException("Cannot get encoding: " + e.getMessage(), e); } } } diff -rupN bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.java bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.java --- bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.java 2025-10-25 07:40:28.278407368 +0200 +++ bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.java 2025-10-25 07:40:47.174482494 +0200 @@ -11,7 +11,7 @@ import org.bordercastle.pqc.math.ntru.Po * @see NTRUHPS2048509 * @see NTRUHPS2048677 * @see NTRUHPS4096821 - * @see NTRU specification document section 1.3.2 + * @see NTRU specification document, section 1.3.2 */ public abstract class NTRUHPSParameterSet extends NTRUParameterSet diff -rupN bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.java bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.java --- bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.java 2025-10-25 07:40:28.316407519 +0200 +++ bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.java 2025-10-25 07:40:47.174482494 +0200 @@ -10,7 +10,7 @@ import org.bordercastle.pqc.math.ntru.Po * The naming convention for the classes is {@code NTRUHRSS[n]}. e.g. {@link NTRUHRSS701} has n = 701. * * @see NTRUHRSS701 - * @see NTRU specification document section 1.3.3 + * @see NTRU specification document, section 1.3.3 */ public abstract class NTRUHRSSParameterSet extends NTRUParameterSet diff -rupN bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/Polynomial.java bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/Polynomial.java --- bouncycastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/Polynomial.java 2025-10-25 07:40:28.335407594 +0200 +++ bordercastle/boca-light/src/main/java/org/bordercastle/pqc/math/ntru/Polynomial.java 2025-10-25 07:40:47.173482490 +0200 @@ -80,7 +80,7 @@ public abstract class Polynomial * * @param len array length of packed polynomial * @return - * @see NTRU specification section 1.8.5 + * @see NTRU specification, section 1.8.5 */ // defined in packq.c public abstract byte[] sqToBytes(int len); @@ -90,7 +90,7 @@ public abstract class Polynomial * Unpack a Sq polynomial * * @param a byte array of packed polynomial - * @see NTRU specification section 1.8.6 + * @see NTRU specification, section 1.8.6 */ // defined in packq.c public abstract void sqFromBytes(byte[] a); @@ -101,7 +101,7 @@ public abstract class Polynomial * * @param len array length of packed polynomial * @return - * @see NTRU specification section 1.8.3 + * @see NTRU specification, section 1.8.3 */ // defined in packq.c public byte[] rqSumZeroToBytes(int len) @@ -114,7 +114,7 @@ public abstract class Polynomial * Unpack a Rq0 polynomial * * @param a byte array of packed polynomial - * @see NTRU specification section 1.8.4 + * @see NTRU specification, section 1.8.4 */ // defined in packq.c public void rqSumZeroFromBytes(byte[] a) @@ -135,7 +135,7 @@ public abstract class Polynomial * * @param messageSize array length of packed polynomial * @return - * @see NTRU specification section 1.8.7 + * @see NTRU specification, section 1.8.7 */ // defined in pack3.c public byte[] s3ToBytes(int messageSize) @@ -181,7 +181,7 @@ public abstract class Polynomial * Unpack a S3 polynomial * * @param msg byte array of packed polynomial - * @see NTRU specification section 1.8.8 + * @see NTRU specification, section 1.8.8 */ // defined in pack3.c public void s3FromBytes(byte[] msg) @@ -248,7 +248,7 @@ public abstract class Polynomial /** * @param a - * @see NTRU specification section 1.9.3 + * @see NTRU specification, section 1.9.3 */ // defined in poly_lift.c public abstract void lift(Polynomial a); diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/cmp/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/cmp/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/cmp/package-info.java 2025-10-25 07:40:36.887441590 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/cmp/package-info.java 2025-10-25 07:40:47.174482494 +0200 @@ -1,6 +1,4 @@ /** - * * Basic support package for handling and creating CMP (RFC 4210) certificate management messages. */ package org.bordercastle.cert.cmp; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/jcajce/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/jcajce/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/jcajce/package-info.java 2025-10-25 07:40:36.373439547 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/jcajce/package-info.java 2025-10-25 07:40:47.174482494 +0200 @@ -1,6 +1,4 @@ /** - * * JCA extensions to the CRMF online certificate request package. */ package org.bordercastle.cert.crmf.jcajce; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/package-info.java 2025-10-25 07:40:36.419439730 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/crmf/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * Basic support package for handling and creating CRMF (RFC 4211) certificate request messages. */ package org.bordercastle.cert.crmf; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/jcajce/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/jcajce/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/jcajce/package-info.java 2025-10-25 07:40:36.573440342 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/jcajce/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * JCA extensions to the certificate building and processing package. */ package org.bordercastle.cert.jcajce; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/jcajce/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/jcajce/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/jcajce/package-info.java 2025-10-25 07:40:36.749441041 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/jcajce/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * JCA extensions to the OCSP online certificate status package. */ package org.bordercastle.cert.ocsp.jcajce; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/package-info.java 2025-10-25 07:40:36.764441101 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/ocsp/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * Basic support package for handling and creating OCSP (RFC 2560) online certificate status requests. */ package org.bordercastle.cert.ocsp; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/selector/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/selector/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/cert/selector/package-info.java 2025-10-25 07:40:36.690440807 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/cert/selector/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * Specialised Selector classes for certificates, CRLs, and attribute certificates. */ package org.bordercastle.cert.selector; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/bc/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/bc/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/bc/package-info.java 2025-10-25 07:40:33.882429643 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/bc/package-info.java 2025-10-25 07:40:47.175482498 +0200 @@ -1,6 +1,4 @@ /** - * * BC lightweight API extensions and operators for the PKCS#10 certification request package. */ package org.bordercastle.pkcs.bc; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/jcajce/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/jcajce/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/jcajce/package-info.java 2025-10-25 07:40:33.790429277 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/jcajce/package-info.java 2025-10-25 07:40:47.176482502 +0200 @@ -1,6 +1,4 @@ /** - * * JCA extensions and operators for the PKCS#10 certification request package. */ package org.bordercastle.pkcs.jcajce; diff -rupN bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/package-info.java bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/package-info.java --- bouncycastle/boca-pkix/src/main/java/org/bordercastle/pkcs/package-info.java 2025-10-25 07:40:33.847429504 +0200 +++ bordercastle/boca-pkix/src/main/java/org/bordercastle/pkcs/package-info.java 2025-10-25 07:40:47.176482502 +0200 @@ -1,6 +1,4 @@ /** - * * Basic support package for handling and creating PKCS#10 certification requests, PKCS#8 encrypted keys and PKCS#12 keys stores. */ package org.bordercastle.pkcs; diff -rupN bouncycastle/boca-prov/src/main/java/org/bordercastle/jce/provider/BouncyCastleProvider.java bordercastle/boca-prov/src/main/java/org/bordercastle/jce/provider/BouncyCastleProvider.java --- bouncycastle/boca-prov/src/main/java/org/bordercastle/jce/provider/BouncyCastleProvider.java 2025-10-25 07:40:40.980457864 +0200 +++ bordercastle/boca-prov/src/main/java/org/bordercastle/jce/provider/BouncyCastleProvider.java 2025-10-25 07:40:47.176482502 +0200 @@ -151,7 +151,7 @@ public final class BouncyCastleProvider private static final String KEYSTORE_PACKAGE = "org.bordercastle.jcajce.provider.keystore."; private static final String[] KEYSTORES = { - "BoCa", "BCFKS", "PKCS12" + "BC", "BCFKS", "PKCS12" }; /* @@ -172,7 +172,22 @@ public final class BouncyCastleProvider */ public BouncyCastleProvider() { - super(PROVIDER_NAME, 1.81, info); + this(PROVIDER_NAME); + } + + /** + * Construct a new provider with a custom name. This should only be required when + * using runtime registration of the provider using the + * Security.addProvider() mechanism. + * This constructor allows to give a distinct name to the new provider and thus allows + * to register multiple instances with separate names. This is helpful in environments + * where classloader problems would occur when one classloader installs the provider + * but another classloader attempts to cast objects created by the first provider + * (e.g. in webapp containers where each webapp wants to install the provider). + */ + public BouncyCastleProvider(final String providerName) + { + super(providerName, 1.81, info); AccessController.doPrivileged(new PrivilegedAction() { @@ -184,6 +199,19 @@ public final class BouncyCastleProvider }); } + @Override public String toString() + { + // the java.security.Provider class in Android doesn't support the + // c'tor with a string version argument + // => was only introduced in JDK-9 + // => but Android is based on JDK-8 + // => must instead override the base class' toString() method + // to output the version in string form instead of as double + // (which would truncate trailing zeroes) + // => output "1.80" instead of "1.8" ... + return getName() + " version " + org.bordercastle.Version.getVersion(); + } + private void setup() { loadAlgorithms(DIGEST_PACKAGE, DIGESTS); diff -rupN bouncycastle/boca-prov/src/main/java/org/bordercastle/pqc/jcajce/provider/BouncyCastlePQCProvider.java bordercastle/boca-prov/src/main/java/org/bordercastle/pqc/jcajce/provider/BouncyCastlePQCProvider.java --- bouncycastle/boca-prov/src/main/java/org/bordercastle/pqc/jcajce/provider/BouncyCastlePQCProvider.java 2025-10-25 07:40:40.159454599 +0200 +++ bordercastle/boca-prov/src/main/java/org/bordercastle/pqc/jcajce/provider/BouncyCastlePQCProvider.java 2025-10-25 07:40:47.176482502 +0200 @@ -51,7 +51,22 @@ public class BouncyCastlePQCProvider */ public BouncyCastlePQCProvider() { - super(PROVIDER_NAME, 1.81, info); + this(PROVIDER_NAME); + } + + /** + * Construct a new provider with a custom name. This should only be required when + * using runtime registration of the provider using the + * Security.addProvider() mechanism. + * This constructor allows to give a distinct name to the new provider and thus allows + * to register multiple instances with separate names. This is helpful in environments + * where classloader problems would occur when one classloader installs the provider + * but another classloader attempts to cast objects created by the first provider + * (e.g. in webapp containers where each webapp wants to install the provider). + */ + public BouncyCastlePQCProvider(final String providerName) + { + super(providerName, 1.81, info); AccessController.doPrivileged(new PrivilegedAction() { @@ -63,6 +78,19 @@ public class BouncyCastlePQCProvider }); } + @Override public String toString() + { + // the java.security.Provider class in Android doesn't support the + // c'tor with a string version argument + // => was only introduced in JDK-9 + // => but Android is based on JDK-8 + // => must instead override the base class' toString() method + // to output the version in string form instead of as double + // (which would truncate trailing zeroes) + // => output "1.80" instead of "1.8" ... + return getName() + " version " + org.bordercastle.Version.getVersion(); + } + private void setup() { loadAlgorithms(ALGORITHM_PACKAGE, ALGORITHMS); diff -rupN bouncycastle/boca-util/src/main/java/org/bordercastle/asn1/tsp/ArchiveTimeStamp.java bordercastle/boca-util/src/main/java/org/bordercastle/asn1/tsp/ArchiveTimeStamp.java --- bouncycastle/boca-util/src/main/java/org/bordercastle/asn1/tsp/ArchiveTimeStamp.java 2025-10-25 07:40:44.480471784 +0200 +++ bordercastle/boca-util/src/main/java/org/bordercastle/asn1/tsp/ArchiveTimeStamp.java 2025-10-25 07:40:47.177482506 +0200 @@ -17,7 +17,6 @@ import org.bordercastle.asn1.x509.Algori /** * Implementation of the Archive Timestamp type defined in RFC4998. - * @see RFC 4998 *

* ASN.1 Archive Timestamp *

@@ -30,6 +29,7 @@ import org.bordercastle.asn1.x509.Algori * PartialHashtree ::= SEQUENCE OF OCTET STRING *

* Attributes ::= SET SIZE (1..MAX) OF Attribute + * @see RFC 4998 */ public class ArchiveTimeStamp extends ASN1Object