Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
4246 commits
Select commit Hold shift + click to select a range
d1977d4
Reject ambiguous multi-'@' rfc822Name tested names in nameConstraints
peterdettman Jul 2, 2026
3253175
Documented SBOM/CBOM generation in README.md and brought build instru…
dghgit Jul 2, 2026
a35bf0f
Merge branch 'main' into legacy-properties-overlay-sync
dghgit Jul 2, 2026
d9889a3
Restore a green build1-4 (jdk1.4) build and test run following the me…
dghgit Jul 3, 2026
6854a62
Sync the jdk1.4 overlays with base, porting missed security and behav…
dghgit Jul 3, 2026
f5de1c8
added use of priveledged action
dghgit Jul 3, 2026
9bf4a57
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 3, 2026
8db136f
X.509 name-parse robustness (COV-4 / COV-6)
ligefeiBouncycastle Jul 3, 2026
ebdcea8
Merge branch 'x509-name-parse-robustness' into 'main'
dghgit Jul 3, 2026
c71b283
Mirror X509_ALLOW_LENIENT_RFC822_NAME into the jdk1.4 Properties over…
dghgit Jul 3, 2026
a4f00b1
Add docs/claude/build-jdk14.md covering the build1-4 legacy build: so…
dghgit Jul 3, 2026
4139886
Complete XMSS/XMSS^MT SP 800-208 support and move asn1.iana into core…
dghgit Jul 3, 2026
80fa867
Be lenient about the ASN.1 string type for an SGP22 EUM IIN (serialNu…
peterdettman Jul 3, 2026
37094e5
Grow ASN.1 definite-length objects incrementally via Streams.readLenB…
dghgit Jul 4, 2026
115e852
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 4, 2026
fb3fd82
RFC 9734 implementation
Jun 2, 2026
b2a3e52
Add a KeyPurposeId OID unit test covering the recently-added Extended…
dghgit Jul 4, 2026
c43e578
Move the ASN.1 max-construction-depth and max-length stream property …
dghgit Jul 4, 2026
99a9eaf
CMS: type-check asn1.cms.Attribute decode (no ClassCastException past…
ligefeiBouncycastle Jul 4, 2026
34244f7
Merge branch 'cms-attribute-type-guard' into 'main'
dghgit Jul 4, 2026
cd1d88f
Reject a key whose tree digest is outside the named XMSS/XMSS^MT sign…
dghgit Jul 5, 2026
c93b376
moved to 1.85 release
dghgit Jul 6, 2026
a8b7832
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 6, 2026
7b2c325
Export the new org.bouncycastle.crypto.bls package from the provider …
dghgit Jul 6, 2026
9b58957
Cleaned up 1.85 release notes: removed duplicated policy-tree and Fal…
dghgit Jul 6, 2026
7ff53a9
Removed the Dilithium, SPHINCSPlus and Kyber JCE wrappers from the BC…
dghgit Jul 6, 2026
29ae9ee
Added JCA/JCE provider test coverage for AIMer and a BC-provider key-…
dghgit Jul 6, 2026
be08d30
Made the SDitH engines package-private in line with the other PQC eng…
dghgit Jul 6, 2026
2112905
Removed the unreferenced Hawk NTRUProfile and BLS12_381Fp classes and…
dghgit Jul 6, 2026
79853c5
Removed the unused org.bouncycastle.iana.AEADAlgorithm constants clas…
dghgit Jul 6, 2026
bf1f59f
Removed stale ext module descriptor exports for long-deleted legacy P…
dghgit Jul 6, 2026
73fcb0a
Brought internal CMSOBjectIdentifiers in line with util, corrected re…
dghgit Jul 6, 2026
2be1777
Added missing 1.85 release note entries: AC signature verification, N…
dghgit Jul 6, 2026
b1a7e78
Fixed HTML defects in CONTRIBUTORS.html (premature list-item close or…
dghgit Jul 6, 2026
6790a22
Export org.bouncycastle.jcajce.provider.asymmetric.compositekem from …
dghgit Jul 6, 2026
49bb5cf
Brought docs/specifications.html up to date with the current algorith…
dghgit Jul 6, 2026
f08c13e
added note about deprecated PQC implementations
dghgit Jul 6, 2026
5fe1ec0
Fixed jdk1.4/legacy Ant builds: restored asn1.iana in the provider fi…
dghgit Jul 6, 2026
89054f3
Fixed jdk18+/legacy Ant test builds: signer-info clash on package-pri…
dghgit Jul 6, 2026
c45097e
Fixed jdk15to18 build: declare the captured tooShort local final in P…
dghgit Jul 6, 2026
e2fa0f3
Resynced the jdk1.5 BaseBlockCipher overlay with base: it had rotted …
dghgit Jul 6, 2026
4b58ed7
Added lms/mayo/sdith test excludes to jdk15+.xml core test fileset, m…
dghgit Jul 6, 2026
527624f
CMSSignedData.replaceSigners/addDigestAlgorithm recompute the SignedD…
dghgit Jul 7, 2026
082fa17
Fixed keybox Blob.getInstance treating an EMPTY_BLOB as end-of-file, …
dghgit Jul 7, 2026
48a0a0a
Harden asn1.cms.SignerInfo decode to reject a non-INTEGER version or …
dghgit Jul 7, 2026
064fd52
Reject empty SEQUENCE in the RFC 5280 SEQUENCE SIZE (1..MAX) X.509 ex…
dghgit Jul 7, 2026
df26a27
Credited digi-scrypt in CONTRIBUTORS and added a release note for the…
dghgit Jul 7, 2026
9961e6f
Give RevocationTest's eeCertWithDistPoint a valid non-empty CRL distr…
Jul 7, 2026
d520021
Made the X509RevocationChecker soft-fail hard limit inclusive (failHa…
dghgit Jul 7, 2026
eb7ad2e
Replaced the CMS SignedData version-preservation property with a CMSS…
dghgit Jul 7, 2026
9197bc4
Fixed an off-by-4 header-length guard in NotationData.verifyData: the…
dghgit Jul 8, 2026
b2b4fba
Exercise the SPHINCS+ OID encode/decode round-trip for the -simple va…
dghgit Jul 8, 2026
2151d2e
deleted unnecessary file
dghgit Jul 8, 2026
257799a
Extended the generateCbom fallback primitive classification to cover …
dghgit Jul 9, 2026
135b014
1.85 release notes - with CVE listing
dghgit Jul 9, 2026
f10384a
Brought the JPMS module descriptors and OSGi Export-Package headers b…
dghgit Jul 9, 2026
7172710
Derive OpenPGPCertificate subkey/key expiry only from a cryptographic…
dghgit Jul 9, 2026
fd546f5
Cap the declared OpenPGP signature subpacket length at SignaturePacke…
dghgit Jul 9, 2026
e4df40b
Default version 6 OnePassSignaturePacket to the new OpenPGP packet fo…
dghgit Jul 10, 2026
9acf752
Fixed an off-by-one in the keybox EMPTY_BLOB skip guard: a well-forme…
dghgit Jul 10, 2026
478234d
Documented the OSGi Export-Package brace-list in build.gradle as a se…
dghgit Jul 10, 2026
bc8bd3c
Reject CR/LF in the S/MIME streaming writer header names and values: …
dghgit Jul 11, 2026
97469d8
Give pkix its own public org.bouncycastle.operator.OidCatalogue and d…
dghgit Jul 11, 2026
931d269
Added the maxSerial field to the MTCCertificationAuthority (id-pe-mtc…
dghgit Jul 11, 2026
84c0c1f
Bump the Merkle Tree Certificates release note to track draft-ietf-pl…
dghgit Jul 11, 2026
5cfd860
Enforce the draft-ietf-tls-trust-anchor-ids sec. 3 / 4.1 opaque Trust…
dghgit Jul 11, 2026
b6bc884
Removed the dead randomizer plumbing from the composite ML-DSA Signat…
dghgit Jul 11, 2026
86482e4
Enforce the RFC 9629 kekLength INTEGER (1..65535) lower bound and the…
dghgit Jul 11, 2026
1db7a72
Added a legacy-source-javadoc-jars skill documenting how to build Mav…
dghgit Jul 11, 2026
a730518
Name the jdk1.4 Ant-build jars <module>-debug-jdk14-<version> when re…
dghgit Jul 11, 2026
bb26088
Name the jdk15to18 Ant-build jars <module>-debug-jdk15to18-<version> …
dghgit Jul 11, 2026
f360f23
Ignore repository-root *.jar files (/*.jar) so stray build-artifact j…
dghgit Jul 11, 2026
e128162
Fix build1-5to1-8 so the META-INF/services/java.security.Provider pos…
dghgit Jul 11, 2026
1a7332a
Restore the jdk15to18 Ant test build under genuine javac 1.5: add the…
dghgit Jul 11, 2026
9b43e92
Resolve CertTest's reflective verify(PublicKey,Provider) call through…
dghgit Jul 11, 2026
b73cf4d
Reset the KGCM associated-text accumulator in KGCMBlockCipher.init so…
dghgit Jul 12, 2026
10056f5
Name the Gradle-build jars/artifacts <module>-debug-jdk18on-<version>…
dghgit Jul 12, 2026
3d826de
Support variable-length associated data and short nonces in KCCMBlock…
dghgit Jul 12, 2026
4f24982
Document the release.debug Gradle build property in README.md: add a …
dghgit Jul 12, 2026
ecee534
Anchor run_mtt.sh's gradle.properties version parse to the version= line
Jul 12, 2026
57fbd3c
Set the 1.85 release date to 2026, July 12th in the release notes
dghgit Jul 14, 2026
eb8cfe7
Add a Docker-based jdk1.3 (build1-3) build path and begin the jdk1.3 …
dghgit Jul 14, 2026
7572561
Bump versions for the 1.86 development cycle: gradle/bc-build to 1.86…
dghgit Jul 14, 2026
58cc1fd
updated section numbers, added 1.86
dghgit Jul 14, 2026
f1f64e7
Sync the Ed25519 KeyFactorySpi OpenSSH path across the JDK 11/15 mult…
dghgit Jul 15, 2026
fa70011
Document checking for MR overlays and adding JVM-specific (testN) cov…
dghgit Jul 15, 2026
f090469
Stop bundling org.bouncycastle.asn1.iana into the Ant-built bcutil jars
dghgit Jul 15, 2026
ca363de
Stop bundling org.bouncycastle.asn1.iana into the Ant-built bcutil ja…
dghgit Jul 15, 2026
3464fe6
Fix KeyIdentifier.matches(List, KeyIdentifier, boolean) to examine ev…
dghgit Jul 15, 2026
2b9c104
Reach the Argon2 s2kCalculator null-guard in PGPUtil.makeKeyFromPassP…
dghgit Jul 15, 2026
0802cf1
Accept an empty passphrase on the JCE ARGON2 SecretKeyFactory path
dghgit Jul 15, 2026
bad0fa9
Validate untrusted RSASSA-PSS parameters in BcRsaPssUtil.createSigner
dghgit Jul 15, 2026
e2b3a39
Guard CMSUtils.getAEADMacLength against malformed AEAD parameters
dghgit Jul 15, 2026
5a3d831
Bound the scrypt parallelization parameter p in the PKCS8/PKCS12 cost…
dghgit Jul 15, 2026
b6a0550
Bound the 204/404 body drain in ESTService.getCSRAttributes so it can…
dghgit Jul 15, 2026
6d0ad7c
Reject a negative PBKDF2 iteration count in the CMS password-recipien…
dghgit Jul 15, 2026
6ba0153
Fall back to a module-safe ResourceBundle lookup in LocalizedMessage …
dghgit Jul 15, 2026
d6b8f75
Use ASN1BitString.getBytes() for composite signature components
dghgit Jul 15, 2026
8ad4366
Add a strict equals() to KEMRecipientId for parity with the other CMS…
dghgit Jul 15, 2026
b19c272
version bump
dghgit Jul 15, 2026
3f492e5
Return 0 from KCCMBlockCipher.getUpdateOutputSize so JCA CCM decrypti…
dghgit Jul 15, 2026
81ca968
Document the full version-bump file set (incl. the OpenPGP armor DEFA…
dghgit Jul 15, 2026
4ca5bc0
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 15, 2026
a6ae246
Add an X500NameStyle example showing how to parse a Distinguished Nam…
dghgit Jul 15, 2026
09cb1ed
Add the misc examples tree to the Gradle build as a non-publishing mo…
dghgit Jul 15, 2026
272fb32
Add ML-KEM and X-Wing KEM support to HPKE, relates to github #2351
Jul 15, 2026
b4df1c5
Bound the PKIX certification-path builder's depth-first search with a…
dghgit Jul 16, 2026
23b6712
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 16, 2026
3406b62
Keep junit out of the legacy provider jars by excluding main-namespac…
dghgit Jul 16, 2026
e1271da
Document the jdk1.3->jdk1.4 overlay layering and the legacy provider-…
dghgit Jul 16, 2026
38f563a
Drop crypto.agreement.owl.AllTests from the signed legacy Ant test st…
dghgit Jul 16, 2026
e57eda2
Revive the jdk1.3 (build1-3) provider build: sync rotted overlays (X5…
dghgit Jul 16, 2026
924fd93
added back PQC list
dghgit Jul 16, 2026
ff7b761
Guard empty/missing-content and out-of-range parse paths against leak…
Jul 17, 2026
f9762d3
Advance the jdk1.3 full build: re-introduce SecretWithEncapsulation w…
dghgit Jul 17, 2026
3001351
fixed typo in CVE number
dghgit Jul 17, 2026
eaeab5d
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 17, 2026
cfbf497
minor cleanup.
dghgit Jul 17, 2026
606a959
Add PQCCertTest exercising ML-KEM and FrodoKEM certificate generation…
dghgit Jul 18, 2026
9b2a164
Enable FrodoKEM as a CMS RFC 9629 KEMRecipientInfo recipient by regis…
dghgit Jul 18, 2026
1dfefa6
Add user keying material (UKM) support to the CMS RFC 9629 KEMRecipie…
dghgit Jul 18, 2026
eac0b55
Register a Composite ML-KEM KEM Cipher so composite recipients work i…
dghgit Jul 19, 2026
657daa1
Route InvalidKeyException throws that fold in a caught exception's me…
dghgit Jul 19, 2026
5b0e00d
Route the RSA-KEM CipherSpi wrap-failure IllegalBlockSizeException th…
dghgit Jul 19, 2026
8831e2b
Add SecurityExceptions.noSuchAlgorithmException and route cause-foldi…
dghgit Jul 19, 2026
2dd651e
Add JceKEMAuthEnvelopedRecipient so KEM (RFC 9629) recipients work wi…
dghgit Jul 19, 2026
0d4fe40
Assert the AES-256-KW wrap OID in the Composite ML-KEM CMS test, pinn…
dghgit Jul 19, 2026
5b42463
fixed JavaDoc
dghgit Jul 19, 2026
52407d8
Document CMS container constructors, noting byte[] input must be the …
dghgit Jul 19, 2026
575a623
added doc on 1.85.1
dghgit Jul 19, 2026
c47e8a8
Fix CodeQL workflow: trigger on main not master, bump to codeql-actio…
dghgit Jul 19, 2026
6bd6a1d
Support Destroyable on ML-DSA/ML-KEM/SLH-DSA/FrodoKEM/CMCE private ke…
dghgit Jul 21, 2026
bac2ac4
Javadoc
peterdettman Jul 21, 2026
5123fbb
updated the javadoc for the mozilla and tsp packages within the pkix …
Jul 21, 2026
3d471c2
Open-code BigIntegers value-exact range checks again, BigInteger.intV…
Jul 21, 2026
119b1b3
Give BlockPool imlpementations access to Block.clear()
peterdettman Jul 22, 2026
e2bfbf7
pg: javadoc fixes and test cleanup
peterdettman Jul 22, 2026
c20b0cc
Fix hasRevocation for enc alg primary
peterdettman Jul 22, 2026
2121327
Rewrite SignatureCheck parsing constructor
peterdettman Jul 22, 2026
20ea131
Reference property name constant
peterdettman Jul 22, 2026
0732e80
Delete unused method
peterdettman Jul 22, 2026
72789cd
Explicit string conversion instead of MemoryStream.toString
peterdettman Jul 22, 2026
bfd3894
Refactoring in bcpg
peterdettman Jul 22, 2026
44bfa07
Corrected an always-false OID comparison so JceKeyTransRecipient key-…
ligefeiBouncycastle Jul 23, 2026
7b743b8
Merge branch 'cms-cek-hkdf-keysize-validation' into 'main'
ligefeiBouncycastle Jul 23, 2026
6c3972f
Corrected BCMLKEMPrivateKey to use MLKEMPrivateKeyParameters format c…
Jul 23, 2026
0ab15c2
Cap the PBMAC1 PBKDF2 iteration count in JcePBMac1CalculatorBuilder (…
ligefeiBouncycastle Jul 23, 2026
91a78e8
Merge branch 'pkcs-pbmac1-iteration-cap' into 'main'
ligefeiBouncycastle Jul 23, 2026
1e5c0c5
Corrected SICBlockCipher.getPosition() borrow propagation for counter…
Jul 23, 2026
5f34c21
Extended generateCbom to sweep the public lightweight API (org.bouncy…
mwcw Jul 23, 2026
bf32e2f
Fall back to CRL checking when the OCSP responder is unreachable, rel…
Jul 23, 2026
7f42c92
SM9-KEM: add the SM9 identity-based key encapsulation mechanism (GM/T…
ligefeiBouncycastle Jul 23, 2026
999c4e7
Merge branch 'sm9-kem' into 'main'
dghgit Jul 23, 2026
c9c0d29
Extended the generateCbom lightweight sweep to standalone parameteris…
dghgit Jul 23, 2026
a296984
Merge branch 'cbom-lightweight-api'
dghgit Jul 23, 2026
3c36de6
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 23, 2026
1299519
OpenPGP v6 SEIPDv2 AEAD chunkSize is unbounded on decrypt → 1L<<(chun…
Jul 23, 2026
71b8e36
Revert "OpenPGP v6 SEIPDv2 AEAD chunkSize is unbounded on decrypt → 1…
Jul 23, 2026
4cd9a3e
Added SM9EncMasterPrivateKey and SM9EncMasterPublicKey interfaces for…
dghgit Jul 23, 2026
a5b0498
Classify the SM9-ENC master keypair asset as kem in the generateCbom …
dghgit Jul 23, 2026
080adad
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 23, 2026
ee551da
SM9: implement the Destroyable pattern on the SM9 private keys - dest…
Jul 24, 2026
3c40059
SM9: expose the KEM through the JDK 21 javax.crypto.KEM API as KEM.SM…
Jul 24, 2026
eeb3c6c
SM9: add identity-based public-key encryption (Cipher.SM9, GM/T 0044.4)
Jul 24, 2026
ba19435
SM9: encrypt to the recipient's public key rather than master public …
Jul 24, 2026
d10b2f6
Reshaped SM9Engine to the SM2Engine API pattern (Mode constructor, in…
dghgit Jul 24, 2026
d6d7ec2
TLS: fall back to the generic RSASSA-PSS signature name (digest via P…
dghgit Jul 24, 2026
de09fd4
SM9: add the identity-based key exchange protocol (GM/T 0044.3), comp…
Jul 24, 2026
014486a
SM9: add the identity-based digital signature algorithm (Signature.SM…
ligefeiBouncycastle Jul 24, 2026
fe1167f
Merge branch 'sm9-sign' into 'main'
ligefeiBouncycastle Jul 24, 2026
a5521ce
Merge remote-tracking branch 'origin/main' into sm9-keyexchange
Jul 24, 2026
a9fa849
SM9: consolidate the five per-algorithm SM9 release notes into a sing…
Jul 24, 2026
d40a00b
SM9: reject non-positive key lengths in SM9KEMGenerator / SM9KEMExtra…
ligefeiBouncycastle Jul 24, 2026
fdc5011
Merge branch 'sm9-kem-keylen' into 'main'
ligefeiBouncycastle Jul 24, 2026
7b83908
OpenPGP v6 SEIPDv2 AEAD chunkSize is unbounded on decrypt → 1L<<(chun…
ligefeiBouncycastle Jul 25, 2026
57e7633
Merge branch 'pg-seipdv2-reland' into 'main'
ligefeiBouncycastle Jul 25, 2026
b0d0e07
EST: stop a close() failure masking the settled 204/404 status in EST…
dghgit Jul 25, 2026
915e7f3
CMS: JceKTSKeyTransRecipient now extends AbstractRecipient, so KTS re…
dghgit Jul 25, 2026
642fb5e
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 25, 2026
181b7d3
guard minimum length in sm2 decrypt and gost/dstu/desede/rc2 unwrap
rootvector2 Jul 15, 2026
ad32824
Align the SM2 short-ciphertext message with the rest of the lightweig…
Jul 25, 2026
b22e9ae
Credit rootvector2 in CONTRIBUTORS for the SM2 / GOST28147 / DSTU7624…
Jul 25, 2026
1fff345
OpenPGP: stop BcAEADUtil's AEAD encrypt stream encrypting chunks in p…
dghgit Jul 25, 2026
bb926dc
Machine-enforce core's JDK security surface (SecureRandom, Destroyabl…
dghgit Jul 25, 2026
917ac26
Updated the Claude guidance: UPSTREAM-*.md porting workflow from BC-L…
dghgit Jul 25, 2026
d617238
CMS: parse the output length carried in id-shake256-len's parameter i…
dghgit Jul 25, 2026
3cbc80c
Merge branch 'pr-2359-wrap-length-guards' into 'main'
ligefeiBouncycastle Jul 25, 2026
e4dc3f4
CTR/SIC: bound the full-block-IV counter advance at 2^64 blocks (stat…
dghgit Jul 25, 2026
f865ad7
CMS: add direct edge-case coverage for the id-shake256-len output-len…
dghgit Jul 25, 2026
51e5755
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 25, 2026
3527f34
Salsa20/ChaCha family: fix skip(Long.MIN_VALUE) silently moving nothi…
dghgit Jul 25, 2026
5554a88
Fix ReasonsMask and usage
peterdettman Jul 25, 2026
c804532
PKIX: add regression tests pinning the corrected ReasonsMask.hasNewRe…
dghgit Jul 26, 2026
222b3af
PKIX: single-source the RFC 5280 sec. 6.3.3 CRL scope rules in the ne…
dghgit Jul 26, 2026
e6e8033
PKIX: reconcile the four drifted getCertStatus copies - the pkix revo…
dghgit Jul 26, 2026
b47c033
Updated the Claude guidance: record the asn1.x509 shared pure-ASN.1 v…
dghgit Jul 26, 2026
3c10a5d
PKIX: guard the attacker-controlled CRL entry reasonCode against the …
dghgit Jul 26, 2026
d578c9a
PKIX: PKIXPolicyNode.copy() now re-parents cloned children in the bas…
dghgit Jul 26, 2026
9d270f0
SM9: derive the encryption recipient key in core and seal its constru…
ligefeiBouncycastle Jul 26, 2026
fda42ae
Merge branch 'sm9-enc-pubkey-factory' into 'main'
ligefeiBouncycastle Jul 26, 2026
adc6914
PKIX: single-source the RFC 5280 valid-policy-tree node and its tree …
dghgit Jul 26, 2026
4ed9097
PKIX: deprecate the org.bouncycastle.jce.exception package (ExtExcept…
dghgit Jul 26, 2026
1c990b2
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 26, 2026
6cd9ecb
SM9: rename the master-key user-derivation method generatePrivateKey …
ligefeiBouncycastle Jul 26, 2026
4c38827
Merge branch 'sm9-generate-user-key' into 'main'
dghgit Jul 26, 2026
8620eb2
Merge branch 'main' into sm9-keyexchange
Jul 26, 2026
b9fa2cb
Resync the three jdk1.4 cert-path overlays (jce/provider/CertPathVali…
dghgit Jul 26, 2026
0cbc6c3
Resync the jdk1.4 JcaContentSignerBuilder overlay with base, restorin…
dghgit Jul 26, 2026
c7920a1
added destroyed checks on getEncoded() for PrivateKeys, removed use o…
dghgit Jul 26, 2026
db1954e
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 26, 2026
4b840f9
Compare MLS leaf_index as unsigned in GroupKeySet.hasLeaf and Group.v…
dghgit Jul 26, 2026
e25745a
Resync the jdk1.3 cert-path overlays (mirroring the jdk1.4 sync) and …
dghgit Jul 26, 2026
71aee61
Add a release note for the JcePBMac1CalculatorBuilder PBKDF2 iteratio…
dghgit Jul 26, 2026
b767a78
Document that BC's ML-DSA Signature.verify() returns false uniformly …
dghgit Jul 27, 2026
fbba6c9
SM2: Fix 'random' init, refactoring
peterdettman Jul 27, 2026
518e5b0
Reject an ML-DSA private key encoding that is neither seed- nor expa…
Jul 27, 2026
ac97592
Reject an ML-KEM private key encoding that is neither seed- nor expan…
Jul 27, 2026
5dd019e
Throw IllegalStateException (not NullPointerException) when an SLH-DS…
Jul 27, 2026
2fce64f
Guard four fixed-arity CMS/CRMF/CMP SEQUENCE decode constructors (KEK…
Jul 27, 2026
7618540
Merge remote-tracking branch 'origin/main'
Jul 27, 2026
a6ec849
Throw the contracted UnrecoverableKeyException instead of RuntimeExce…
Jul 27, 2026
e600518
Add HKDF deriveKey coverage to the JDK 25 KDF provider tests, checki…
Jul 27, 2026
e0ab116
Add RFC 9850 (SSLKEYLOGFILE) key logging as a new bctls-klog build of…
Jul 27, 2026
a9cd57c
Fixed a bug that let arbitrary code execution via the property
Jul 27, 2026
8665048
SM9: follow the generatePrivateKey -> generateUserKey rename in the k…
Jul 27, 2026
7e28144
Fix the jdk1.3 test failures surfaced once the suite could actually r…
dghgit Jul 27, 2026
77fad50
Merge branch 'main' of gitlab.cryptoworkshop.com:root/bc-java
dghgit Jul 28, 2026
511c7bc
Merge remote-tracking branch 'origin/main' into sm9-keyexchange
dghgit Jul 28, 2026
775194d
Merge branch 'sm9-keyexchange'
dghgit Jul 28, 2026
b1e21a3
Add missing 1.78 defects-fixed entries for CVE-2024-14041 (KyberSlash…
dghgit Jul 28, 2026
11cae65
minor correction
dghgit Jul 28, 2026
9885fd6
Replace non-ASCII typographic characters in javadoc and comments with…
dghgit Jul 28, 2026
e8bf1bc
Record the release-note convention that a CVE-bearing fix is cross-re…
dghgit Jul 28, 2026
22db5b9
Add Properties.EC_MAX_F2M_FIELD_SIZE for the org.bouncycastle.ec.max_…
dghgit Jul 28, 2026
b9c42b7
Make HQC's GF(2^8) arithmetic table-free and its fixed-weight support…
dghgit Jul 28, 2026
076ca36
Add the 1.86 release notes for the HQC and NTRU constant-time fixes a…
dghgit Jul 28, 2026
9c9ad88
Make NTRU's mod3 and modQ reductions division-free, restoring the ref…
dghgit Jul 28, 2026
d3d00d9
Locate, open and close the BCJSSE default key/trust stores inside Acc…
dghgit Jul 28, 2026
5fbf4b0
Implement support for OpenPGP External Secret Keys
vanitasvitae Jun 28, 2026
5044625
Fix NPE in PGPKeyPair.asSubKey()
vanitasvitae Jul 28, 2026
0b67e2b
Add documentation
vanitasvitae Jul 28, 2026
84c6f4d
OpenPGPKey: Fix bug when sanitizing external secret key
vanitasvitae Jul 28, 2026
8fe125a
Add PublicKeyUtils.isX25519Key() helper method
vanitasvitae Jul 28, 2026
408faea
Introduce AbstractPublicKeyDataDecryptorFactory.getCryptoCallback()
vanitasvitae Jul 28, 2026
9f72f20
Add PublicKeyDataDecryptorFactoryProvider class
vanitasvitae Jul 28, 2026
74047d7
OpenPGPMessageProcessor: Allow adding custom PublicKeyDataDecryptorFa…
vanitasvitae Jul 28, 2026
2afffa5
JcaPGPKeyConverter: Expose conversion method
vanitasvitae Jul 28, 2026
572cbb4
Add generic smart card implementation
vanitasvitae Jul 28, 2026
310ee4a
Add software-key-based smart card simulator implementation and tests
vanitasvitae Jul 28, 2026
2e17bd1
Add initial smart card implementation using Yubikeys
vanitasvitae Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
301 changes: 301 additions & 0 deletions .claude/skills/bcpqc-add-signature-algorithm/SKILL.md

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions .claude/skills/build-jdk13-docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Runtime environment for the bc-java jdk1.3 (build1-3) legacy build.
#
# Base: Debian 4.0 "etch" i386 (glibc 2.3.6). Chosen deliberately:
# * i386 userland -> matches the 32-bit Sun JDK 1.3.1 binaries.
# * glibc < 2.4 -> no PTR_MANGLE pointer mangling. Sun's Classic VM green
# threads hand-roll jmp_buf context switches; on glibc
# >= 2.4 (e.g. bullseye/jessie 2.19) longjmp demangles a
# raw poked-in PC and jumps to garbage -> SIGSEGV. 2.3.6
# does not mangle, so the Classic/green VM runs.
# The host kernel is shared (containers share it), but green threads are
# user-space, so no kernel-version dependency bites here.
FROM debian/eol:etch

# The 2001-era Sun launch wrapper (bin/.java_wrapper) predates x86-64: it reads
# `uname -m`, and because this container shares the host's amd64 kernel that
# returns "x86_64", which the wrapper cannot map to its i386 lib dir -> it dies
# with "can't find libjava.so". apt is dead on EOL etch (no `linux32`), so shim
# `uname -m` to report i686. Everything else passes through to the real uname.
RUN cp -a /bin/uname /bin/uname.real \
&& printf '%s\n' \
'#!/bin/sh' \
'if [ "$1" = "-m" ]; then echo i686; exit 0; fi' \
'exec /bin/uname.real "$@"' > /bin/uname \
&& chmod 0755 /bin/uname

# Nothing else is baked in: the JDK, ant, aux jars and the repo are all
# bind-mounted at run time by build-jdk13.sh so the image stays tiny and the
# host tree is the single source of truth.
120 changes: 120 additions & 0 deletions .claude/skills/build-jdk13-docker/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
name: build-jdk13-docker
description: Build and test the legacy jdk1.3 (build1-3) distribution on a modern host by running the genuine Sun JDK 1.3.1 inside an i386 / glibc-2.3.6 Docker container. Use this whenever the user wants to run "build1-3" / the "jdk1.3" or "Java 1.3" build, get a bcprov-jdk13 jar, reproduce a genuine-1.3 compile failure, or when a genuine JDK 1.3.1 won't start on the host ("can't find libjava.so", missing libstdc++-libc6.1-1.so.2, or a green-threads Classic VM segfault). Captures the container recipe, why glibc < 2.4 is mandatory, the uname/libstdc++/threads traps, and that the jdk1.3 source overlays have rotted (the real source floor is Java 1.4).
---

# Building and testing the jdk1.3 (build1-3) distribution in Docker

The `jdk1.3` distribution is driven by `sh build1-3` → `ant/jdk13.xml` → `ant/bc+-build.xml`,
compiling with the **real Sun JDK 1.3.1** at `/opt/jdk1.3.1` and running tests on the same JRE.
Like `build1-4` it is a genuine-1.3 *compile* floor (post-1.3 APIs fail at compile time), but it
adds two things the jdk1.4 build does not: it builds its own **clean-room JCE** first (from
`jce/src/`, so **no jar signing** is needed — unlike jdk1.4/jdk15to18), and its preprocessor
rewrites the Java-1.4 cert-path API (`java.security.cert.CertStore/CertPath/PKIX*/…Selector`) to
BC's `org.bouncycastle.jce.cert.*` backport, plus `LinkedHashSet`→`HashSet`.

The blocker this skill solves: **a 2001-era 32-bit Sun JDK 1.3.1 cannot run on a modern Linux
host.** The fix is to run it in a period-appropriate i386 container.

## Quick start

```
.claude/skills/build-jdk13-docker/build-jdk13.sh provider # build the provider -> bcprov-jdk13 jar
.claude/skills/build-jdk13-docker/build-jdk13.sh test # full build + tests
.claude/skills/build-jdk13-docker/build-jdk13.sh shell # interactive 1.3 container (fast iteration)
.claude/skills/build-jdk13-docker/build-jdk13.sh # full build (no arg)
```

First run builds a tiny image (`bc-jdk13:etch`). i386 executes natively on an x86-64 kernel — **no
qemu**. Everything (JDK, ant, aux jars, the repo) is bind-mounted from the host; only a `uname`
shim is baked into the image. A full `provider` round is ~10 min (the `<replaceregexp>` preprocess
over ~6,800 files dominates, then the nojit Classic VM compiles).

## Why a genuine JDK 1.3.1 won't run on the host — and why etch

`/opt/jdk1.3.1` (→ `/opt/installs/jdk1.3.1_20`) is a 32-bit x86 Sun JDK. On Ubuntu 24.04:

1. **`uname` wall (cosmetic).** Its launch wrapper (`bin/.java_wrapper`) predates x86-64: it reads
`uname -m`, gets `x86_64` (the container shares the host's amd64 kernel), can't map that to its
i386 lib dir, and dies with **"can't find libjava.so."** Fixed by the image's `uname -m`→`i686`
shim (apt is dead on EOL etch, so there is no `linux32`).
2. **VM wall (fatal on the host).** After that:
- the default `-client`/HotSpot VM uses **native threads** whose launcher binary links the
extinct **`libstdc++-libc6.1-1.so.2`** (gone from modern distros; and 1.3 native threads on
NPTL is broken anyway);
- the `-classic` VM uses **green threads** and needs no libstdc++ — but it **segfaults** on
glibc ≥ 2.4. Cause: glibc 2.4 added `PTR_MANGLE` pointer mangling; Sun's green threads
hand-roll `jmp_buf` context switches, so `longjmp` demangles a raw poked-in PC and jumps to
garbage (`catchsegv` shows `EIP == fault address`, empty backtrace).

So the container base must be **i386 with glibc < 2.4**. `debian/eol:etch` (Debian 4.0, **glibc
2.3.6**) works; `debian/eol:sarge` (2.3.2) also works; anything ≥ 2.4 (jessie 2.19, …) segfaults.
Green threads are user-space, so the shared modern host **kernel** is not a problem.

The recipe therefore forces the **Classic VM / green threads** via a custom `jvm.cfg` (`-classic`
first = default VM → wrapper selects green threads → no libstdc++), sidestepping both VM problems.

## Recipe internals (in this skill dir)

- **`Dockerfile`** — `FROM debian/eol:etch`; the only customization is the `uname -m`→`i686` shim.
- **`jvm.cfg`** — reorders `-classic` to the top so every forked `java`/`javac` defaults to the
green-threads Classic VM. Mounted over `/opt/jdk1.3.1/jre/lib/jvm.cfg` (works because that file
already exists in the ro JDK mount).
- **`build-jdk13.sh`** — bind-mounts the JDK at `/opt/jdk1.3.1` (matching `build1-3`'s hardcoded
`JDKPATH`), ant `/opt/apache-ant-1.6.5`, `/opt/javamail-1.3.1`, `/opt/jaf-1.0.2`, and the repo at
`/work`; exports the `JAVA_MAIL_HOME`/`JAVA_ACTIVATION_HOME` that `build1-3` uses but forgets to
set; runs as your uid so build artifacts aren't root-owned.

Two non-obvious mount facts:
- **ORO for `<replaceregexp>`.** JDK 1.3 has no `java.util.regex`, so ant's regexp preprocessing
needs a Jakarta ORO impl (`/opt/ant/lib` ships only the `ant-apache-oro` *adapter*). The script
locates an `oro-2.0.x.jar` (default `~/.m2/.../oro/2.0.8`) and injects it with `ANT_ARGS="-lib
/opt/extralib"`. It is **not** dropped into `/opt/ant/lib` because docker cannot create a new
mountpoint file inside the read-only `/opt/ant` mount (that fails with "read-only file system").
- `--platform linux/386` sets the userland arch but **not** the syscall personality, so `uname -m`
still returns `x86_64` — hence the image `uname` shim rather than relying on `linux32`.

## The jdk1.3 overlays have rotted — the real source floor is Java 1.4

`build1-3 provider` does not currently produce a jar out of the box: the current `src/main/java`
uses **Java 1.4 APIs** that the jdk1.3 tree never caught up with. Known breakages (fixed where
noted; expect more to surface as each layer clears):

- **`Throwable.initCause` (Java 1.4, absent in 1.3).** Everything routes through
`org.bouncycastle.util.Exceptions` and `org.bouncycastle.jcajce.provider.util.SecurityExceptions`,
whose base classes chain via `initCause`. Handled with **jdk1.3 overlays** that construct
message-only (1.3 has no `getCause`, so no caller can observe a dropped cause) — keep the message
text verbatim (test contract) and the factory signatures in lockstep with base. Direct
`initCause`/`getCause` users outside those two factories need per-file overlays too (grep them:
`grep -rl '\.initCause(\|\.getCause(' core/src/main/java prov/src/main/java`).
- **`@Deprecated` survived preprocessing** (`illegal character: \64` = `@`, then cascading
`<identifier> expected`). Root cause: the shared `ant/build.regexp` `${regexp}` strips
`@Override`/`@SuppressWarnings`/`@FunctionalInterface` but **not** `@Deprecated`; `jdk14.xml` has
a dedicated `@Deprecated` pass and `jdk13.xml` was missing it. **Fixed** by mirroring that pass
into `ant/jdk13.xml`. (If a new annotation type appears, add a pass the same way.)

The Java-1.4-vs-1.3 delta is narrow in reachable code (`initCause`/`getCause` a handful of files,
plus a few `java.net.URI`/`java.nio.*` users, most of which already have overlays). There are **no**
`assert` statements or `java.util.regex` uses in reachable main code. So the effort is overlay-sync,
not a rewrite. Follow the overlay discipline in `docs/claude/build-jdk14.md` (prefer deleting an
overlay when base is 1.3-clean after preprocessing; NOTE-comment every overlay that must exist;
keep `core/src/main/jdk1.3/.../util/Properties.java` mirroring base constants).

## Iterating fast

The `<replaceregexp>` preprocess is the ~7-min bottleneck, and the staging tree is **never cleaned**
by the build (stale sources keep compiling), so after changing overlays/excludes:

```
rm -rf build # on the host; build/ is gitignored
.claude/skills/build-jdk13-docker/build-jdk13.sh provider
```

For tighter loops use `shell`: it drops you into the 1.3 container with everything mounted, so you
can run `sh build1-3 provider` (or `ant -f ant/jdk13.xml build-provider`) directly and re-run after
editing overlays in `/work`, without paying container startup each time. Errors go to the console;
failed test suites write per-suite XML under `build/artifacts/jdk1.3/reports/xml/`.

Verify overlay fixes against the real build — the preprocessor plus 1.3 javac is the only authority,
never eyeball. Related: `docs/claude/build-jdk14.md`, the `build-jdk15to18` skill, and CLAUDE.md's
"Main source stays Java 4 compatible" note (the maintained floor is 1.4; 1.3 is stricter still).
157 changes: 157 additions & 0 deletions .claude/skills/build-jdk13-docker/build-jdk13.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
#!/bin/sh -
#
# Drive the bc-java jdk1.3 (build1-3) legacy build inside an i386 / glibc-2.3.6
# container, because a genuine Sun JDK 1.3.1 no longer runs on a modern host
# (its native-threads launcher needs the extinct libstdc++-libc6.1-1.so.2, and
# its green-threads Classic VM segfaults on glibc >= 2.4 pointer mangling).
#
# Usage:
# ./build-jdk13.sh # full build (build1-3, no arg)
# ./build-jdk13.sh provider # provider only (build1-3 provider)
# ./build-jdk13.sh test # build + run the test suite
# ./build-jdk13.sh shell # interactive shell in the container (debug)
#
# Override any host path via env, e.g. BC_JAVA=/path/to/bc-java ./build-jdk13.sh
#
set -e

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)

# --- host paths (all bind-mounted read-only except the repo) -----------------
BC_JAVA=${BC_JAVA:-/home/dgh/bc/git/repositories/bc-java}
# Resolve the /opt/jdk1.3.1 symlink to its real target so the mount is stable.
JDK_HOST=${JDK_HOST:-$(readlink -f /opt/jdk1.3.1)}
ANT_HOST=${ANT_HOST:-/opt/apache-ant-1.6.5}
MAIL_HOST=${MAIL_HOST:-/opt/javamail-1.3.1}
JAF_HOST=${JAF_HOST:-/opt/jaf-1.0.2}
BC_TEST_DATA=${BC_TEST_DATA:-$(dirname "$BC_JAVA")/bc-test-data}
IMAGE=${IMAGE:-bc-jdk13:etch}

# ORO impl for ant's <replaceregexp> (JDK 1.3 has no java.util.regex). Not
# bundled with the skill (it is a binary); located from common host spots, or
# set ORO_JAR explicitly. Any jakarta-oro / oro 2.0.x jar works.
if [ -z "$ORO_JAR" ]; then
for c in /home/dgh/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar \
/home/dgh/.m2/repository/oro/oro/2.0.7/oro-2.0.7.jar \
"$SCRIPT_DIR"/oro-*.jar "$SCRIPT_DIR"/jakarta-oro*.jar; do
[ -e "$c" ] && { ORO_JAR=$c; break; }
done
fi

# Real JDK 1.3.1 predates JAXP (added in J2SE 1.4): its rt.jar has no
# org.w3c.dom / javax.xml.transform at all. Two separate classpaths need a
# JAXP/TrAX implementation as a result:
# * ant's OWN JVM, for the "test" target's <junitreport> XSLT step (else
# TransformerFactoryConfigurationError: Provider
# org.apache.xalan.processor.TransformerFactoryImpl not found) -- fixed by
# mounting xalan/serializer into /opt/extralib, picked up automatically via
# ANT_ARGS="-lib /opt/extralib" below (same mechanism as ORO_JAR).
# * the forked <junit> test JVM, whose classpath is built independently by
# ant/bc+-build.xml from build/artifacts/jdk1.3/jars/*.jar (NOT ant's own
# -lib classpath) -- for the XML result formatter's org.w3c.dom.Node, else
# every test suite fails with NoClassDefFoundError. Fixed by copying
# xercesImpl/xml-apis into that jars/ directory as part of the "test" run
# below (build/ is gitignored and gets wiped by `rm -rf build`, so this
# cannot be a one-off manual copy -- it has to happen every run).
if [ -z "$XALAN_JAR" ]; then
for c in /home/dgh/.m2/repository/xalan/xalan/2.7.2/xalan-2.7.2.jar \
/home/dgh/.m2/repository/xalan/xalan/2.7.1/xalan-2.7.1.jar; do
[ -e "$c" ] && { XALAN_JAR=$c; break; }
done
fi
if [ -z "$SERIALIZER_JAR" ]; then
for c in /home/dgh/.m2/repository/xalan/serializer/2.7.2/serializer-2.7.2.jar \
/home/dgh/.m2/repository/xalan/serializer/2.7.1/serializer-2.7.1.jar; do
[ -e "$c" ] && { SERIALIZER_JAR=$c; break; }
done
fi
if [ -z "$XERCES_JAR" ]; then
for c in /home/dgh/.m2/repository/xerces/xercesImpl/2.8.1/xercesImpl-2.8.1.jar \
/home/dgh/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar; do
[ -e "$c" ] && { XERCES_JAR=$c; break; }
done
fi
if [ -z "$XML_APIS_JAR" ]; then
for c in /home/dgh/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar \
/home/dgh/.m2/repository/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar; do
[ -e "$c" ] && { XML_APIS_JAR=$c; break; }
done
fi

for p in "$BC_JAVA/build1-3" "$JDK_HOST/bin/.java_wrapper" "$ANT_HOST/bin/ant" \
"$MAIL_HOST/mail.jar" "$JAF_HOST/activation.jar" "$ORO_JAR" \
"$XALAN_JAR" "$SERIALIZER_JAR" "$XERCES_JAR" "$XML_APIS_JAR" \
"$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR/jvm.cfg"; do
[ -n "$p" ] && [ -e "$p" ] || {
echo "ERROR: missing required path: ${p:-<unset: set ORO_JAR/XALAN_JAR/SERIALIZER_JAR/XERCES_JAR/XML_APIS_JAR explicitly>}" >&2
exit 1
}
done

# bc-test-data is optional -- most SimpleTest/JUnit fixtures need it, but its
# absence should degrade (FileNotFoundException per test) rather than block
# the build. TestResourceFinder's walk-up starts from the forked <junit>'s
# cwd ("${build.dir}/${target.prefix}" = /work/build/jdk13) and climbs one
# path segment at a time; /work/bc-test-data is the candidate it actually
# reaches (its final, root-level candidate collapses to a relative path
# against the JVM's real cwd due to a File("", child) edge case, so mounting
# at the container's true "/" does not work).
BC_TEST_DATA_MOUNT=""
if [ -n "$BC_TEST_DATA" ] && [ -d "$BC_TEST_DATA" ]; then
BC_TEST_DATA_MOUNT="-v $BC_TEST_DATA:/work/bc-test-data:ro"
fi

# --- build the (tiny) image once ---------------------------------------------
if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then
echo ">> building $IMAGE"
docker build --platform linux/386 -t "$IMAGE" "$SCRIPT_DIR"
fi

# --- what to run inside -------------------------------------------------------
if [ "$1" = "shell" ]; then
RUNCMD="exec /bin/sh"
TTY="-it"
else
# build1-3 references $JAVA_MAIL_HOME / $JAVA_ACTIVATION_HOME but never sets
# them, and hardcodes JDKPATH=/opt/jdk1.3.1 -- so we mount the JDK there and
# export the two homes. ANT_HOME is auto-detected by the ant script.
RUNCMD="cd /work && exec sh build1-3 $*"
if [ "$1" = "test" ]; then
# See the XERCES_JAR/XML_APIS_JAR note above: the forked <junit> JVM's
# classpath is every jar in build/artifacts/jdk1.3/jars/, so dropping
# a JAXP/DOM impl there (that directory must already exist from a
# prior plain build -- build-test only depends on init, not on build)
# is how it gets one. Idempotent and silent if the dir is missing.
RUNCMD="cd /work && mkdir -p build/artifacts/jdk1.3/jars && cp /opt/extralib/xercesImpl.jar /opt/extralib/xml-apis.jar build/artifacts/jdk1.3/jars/ && $RUNCMD"
fi
TTY=""
fi

# --- run ----------------------------------------------------------------------
# Nested bind mounts overlay a single file inside a read-only tree:
# * jvm.cfg -> make -classic (green threads) the default VM. This works only
# because jvm.cfg already EXISTS in the ro JDK mount; docker cannot create a
# NEW mountpoint inside a ro mount (that is why oro goes to its own dir and
# is added with ant -lib, not dropped into the ro /opt/ant/lib).
exec docker run --rm $TTY --platform linux/386 \
--user "$(id -u):$(id -g)" \
-e HOME=/tmp \
-e JAVA_MAIL_HOME=/opt/javamail-1.3.1 \
-e JAVA_ACTIVATION_HOME=/opt/jaf-1.0.2 \
-e ANT_HOME=/opt/ant \
-e ANT_ARGS="-lib /opt/extralib" \
-e PATH=/opt/jdk1.3.1/bin:/opt/ant/bin:/usr/bin:/bin \
-w /work \
-v "$BC_JAVA":/work \
-v "$JDK_HOST":/opt/jdk1.3.1:ro \
-v "$SCRIPT_DIR/jvm.cfg":/opt/jdk1.3.1/jre/lib/jvm.cfg:ro \
-v "$ANT_HOST":/opt/ant:ro \
-v "$ORO_JAR":/opt/extralib/oro.jar:ro \
-v "$XALAN_JAR":/opt/extralib/xalan.jar:ro \
-v "$SERIALIZER_JAR":/opt/extralib/serializer.jar:ro \
-v "$XERCES_JAR":/opt/extralib/xercesImpl.jar:ro \
-v "$XML_APIS_JAR":/opt/extralib/xml-apis.jar:ro \
-v "$MAIL_HOST":/opt/javamail-1.3.1:ro \
-v "$JAF_HOST":/opt/jaf-1.0.2:ro \
$BC_TEST_DATA_MOUNT \
"$IMAGE" /bin/sh -c "$RUNCMD"
17 changes: 17 additions & 0 deletions .claude/skills/build-jdk13-docker/jvm.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# Reordered jvm.cfg for the bc-java jdk1.3 Docker build.
#
# First non-# line is the DEFAULT VM. We put -classic first so that every
# `java`/`javac` the build forks selects the Classic VM, which the launch
# wrapper runs with GREEN THREADS. That matters twice:
# * the green-threads launcher binary does NOT link the extinct
# libstdc++-libc6.1-1.so.2 that the native-threads (client/hotspot)
# launcher needs (and which no modern distro ships);
# * green threads are user-space, sidestepping the LinuxThreads-vs-NPTL
# mismatch that breaks Sun 1.3 native threads.
# The other VMs stay listed so an explicit -client/-server still resolves.
#
-classic
-client
-hotspot
-server
Loading
Loading