RELEASE NOTES: JDK 21.0.13

Notes generated: Tue Sep 01 06:02:06 CEST 2026

JEPs

None.

RELEASE NOTES

hotspot/compiler

Issue Description
JDK-8348561

ML-DSA Performance Improved


The performance of the ML-DSA key generation, sign, and verify operations has been improved significantly, 1.5 - 2.5 times depending on operation type and input, on the aarch64 and AVX-512 platforms.


JDK-8349721

ML-KEM Performance Improved


The performance of the ML-KEM key generation, encapsulation, and decapsulation operations has been improved significantly, 1.9 - 2.7 times depending on operation type and platform, on the aarch64 and AVX-512 platforms.


JDK-8351412

ML-KEM Performance Improved


The performance of the ML-KEM key generation, encapsulation, and decapsulation operations has been improved significantly, 1.9 - 2.7 times depending on operation type and platform, on the aarch64 and AVX-512 platforms.


JDK-8351034

ML-DSA Performance Improved


The performance of the ML-DSA key generation, sign, and verify operations has been improved significantly, 1.5 - 2.5 times depending on operation type and input, on the aarch64 and AVX-512 platforms.


JDK-8341527

SHA3 Performance Improved


The performance of the MessageDigest implementations that belong to the SHA3 family (SHA3-224, SHA3-256, SHA3-384, and SHA3-512) has been improved by 6-27%, depending on digested message length and on the platform used. An additional 30-40% can be experienced on AVX-512 capable platforms due to new intrinsic implementations on that platform.


security-libs/javax.crypto

Issue Description
JDK-8347938

Added Support for the Latest ML-KEM and ML-DSA Private Key Encodings


The JDK now encodes ML-KEM and ML-DSA private keys in PKCS #8 format using the DER-encoded ASN.1 CHOICE formats defined in Section 6, "Private Key Format" of RFC 9935 and Section 6, "Private Key Format" of RFC 9881. Two new security properties, jdk.mlkem.pkcs8.encoding and jdk.mldsa.pkcs8.encoding, control the encoding used when generating new keys with a KeyPairGenerator or when translating keys with a KeyFactory. Valid values are seed, expandedKey, and both (case-insensitive). If a system property of the same name is also specified, it supersedes the security property value. All three formats are supported when decoding previously encoded private keys with a KeyFactory.

When these algorithms were introduced in JDK 24, the encoding format was equivalent to the expandedKey value. This release changes the default value to seed. As a result, ML-KEM and ML-DSA private keys generated by this JDK release will not be accepted by older releases by default, although keys generated by older releases are still readable by this release. To enable older JDK releases to accept ML-KEM and ML-DSA private keys generated by this JDK release, set the jdk.mlkem.pkcs8.encoding or jdk.mldsa.pkcs8.encoding property (whichever property is relevant to your use case) to expandedKey, and use KeyFactory.translateKey to convert the key to the older format.


Added Support for the Latest ML-KEM and ML-DSA Private Key Encodings


The JDK now encodes ML-KEM and ML-DSA private keys in PKCS #8 format using the DER-encoded ASN.1 CHOICE formats defined in Section 6, "Private Key Format" of RFC 9935 and Section 6, "Private Key Format" of RFC 9881. Two new security properties, jdk.mlkem.pkcs8.encoding and jdk.mldsa.pkcs8.encoding, control the encoding used when generating new keys with a KeyPairGenerator or when translating keys with a KeyFactory. Valid values are seed, expandedKey, and both (case-insensitive). If a system property of the same name is also specified, it supersedes the security property value. All three formats are supported when decoding previously encoded private keys with a KeyFactory.

The default encoding for newly generated ML-KEM and ML-DSA private keys is seed. Applications that require a particular private-key encoding can configure the relevant security property or equivalent system property.


security-libs/java.security

Issue Description
JDK-8354305

SHAKE128-256 and SHAKE256-512 as MessageDigest Algorithms


Two new MessageDigest algorithms, SHAKE128-256 and SHAKE256-512, have been added to the SUN provider. These are fixed-length versions of the SHAKE128 and SHAKE256 Extendable-Output Functions (XOFs) defined in NIST FIPS 202. For more information, see The SUN Provider.


JDK-8333867

SHA3 Performance Improved


The performance of the MessageDigest implementations that belong to the SHA3 family (SHA3-224, SHA3-256, SHA3-384, and SHA3-512) has been improved by 6-27%, depending on digested message length and on the platform used. An additional 30-40% can be experienced on AVX-512 capable platforms due to new intrinsic implementations on that platform.


JDK-8387123

LuxTrust Global Root CA removed


The following root certificate has been removed from the cacerts keystore: ``` + alias name "luxtrustglobalrootca [jdk]" Distinguished Name: CN=LuxTrust Global Root, O=LuxTrust s.a., C=LU

```


FIXED ISSUES

client-libs/2d

Priority Bug Summary
P3 JDK-8378506 [macOS] Window content not updated when rendering to multiple windows
P3 JDK-8387593 Using XOR mode to clear the content leaves some traces in metal
P4 JDK-8365426 [macos26] Graphics2D tests fail on new macOS 26

client-libs/java.awt

Priority Bug Summary
P4 JDK-8343739 Test java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java failed: Wrong extended key code
P4 JDK-8372546 UnixMultiResolutionSplashTest.java fails intermittently on Ubuntu_24.04

client-libs/javax.accessibility

Priority Bug Summary
P3 JDK-8372757 MacOS, Accessibility: Crash in [MenuAccessibility accessibilityChildren] after JDK-8341311

client-libs/javax.sound

Priority Bug Summary
P3 JDK-7067310 3 tests from closed/javax/sound/sampled caused BSOD on win 7 x86
P4 JDK-8307574 ClipIsRunningAfterStop.java failed with "../nptl/pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed."
P4 JDK-8308395 javax/sound/sampled/Clip/ClipFlushCrash.java timed out

client-libs/javax.swing

Priority Bug Summary
P4 JDK-8382063 Jtreg test javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java fails

core-libs

Priority Bug Summary
P3 JDK-8378180 Compiling OpenJDK with C23 C-Compiler gives warning: initialization discards ‘const’ qualifier from pointer target type
P4 JDK-8388431 [21u] Backport of JDK-8352565 misses previous vm symbol to be deleted
P4 JDK-8340493 Fix some Asserts failure messages

core-libs/java.io:serialization

Priority Bug Summary
P4 JDK-8389492 [21u] java/io/Serializable/records/ProhibitedMethods.java fails after JDK-8307843 backport in othervm mode

core-libs/java.lang

Priority Bug Summary
P4 JDK-8359735 [Ubuntu 25.10] java/lang/ProcessBuilder/Basic.java, java/lang/ProcessHandle/InfoTest.java fail due to rust-coreutils
P4 JDK-8352565 Add native method implementation of Reference.get()

core-libs/java.nio

Priority Bug Summary
P4 JDK-8375294 (fs) Files.copy can fail with EOPNOTSUPP when copy_file_range not supported
P4 JDK-8384163 (so) SocketChannel.connect and finishConnect() exception messages could be improved
P4 JDK-8377983 (zipfs) ZipFileSystem.initCEN needlessly reads END header
P4 JDK-8316391 (zipfs) ZipFileSystem.readFullyAt does not tolerate short reads

core-libs/java.util.jar

Priority Bug Summary
P4 JDK-8341625 Improve ZipFile validation of the END header

core-libs/java.util:i18n

Priority Bug Summary
P4 JDK-8380993 [REDO] Incorrect Interpretation of POSIX TZ Environment Variable on AIX
P4 JDK-8380223 Refactor test/jdk/sun/util/resources TestNG tests to JUnit

core-svc/javax.management

Priority Bug Summary
P4 JDK-8384804 JMX remote bootstrap tests fail on Windows

hotspot/compiler

Priority Bug Summary
P3 JDK-8356085 AArch64: compiler stub buffer size wrongly depends on ZGC
P3 JDK-8348561 Add aarch64 intrinsics for ML-DSA
P3 JDK-8349721 Add aarch64 intrinsics for ML-KEM
P3 JDK-8351034 Add AVX-512 intrinsics for ML-DSA
P3 JDK-8351412 Add AVX-512 intrinsics for ML-KEM
P3 JDK-8341527 AVX-512 intrinsic for SHA3
P3 JDK-8354926 Remove remnants of debugging in the fix for JDK-8348561 and JDK-8349721
P4 JDK-8386578 double_keccak stub does not set its return value on x86
P4 JDK-8310331 JitTester: Exclude java.lang.Math.random
P4 JDK-8369020 Test compiler/intrinsics/TestLongUnsignedDivMod.java completed and timed out
P4 JDK-8331159 VM build without C2 fails after JDK-8180450

hotspot/gc

Priority Bug Summary
P4 JDK-8385454 Provide more NUMA related information in hsinfo/hserr files

hotspot/jfr

Priority Bug Summary
P4 JDK-8365498 jdk/jfr/event/os/TestCPULoad.java fails with Expected at least one event
P4 JDK-8386345 Remove redundant @requires from TestGarbageCollectionEventWithZMinor

hotspot/runtime

Priority Bug Summary
P3 JDK-8377991 TestLimitsUpdating.java fails with runtime exception even after JDK-8370492 is fixed
P4 JDK-8338686 App classpath mismatch if a jar from the Class-Path attribute is on the classpath
P4 JDK-8383611 assert(count == os::processor_count() + 1) failed: invalid enumeration!
P4 JDK-8375125 assert(false) failed: "Attempting to acquire lock NativeHeapTrimmer_lock/nosafepoint out of order with lock ConcurrentHashTableResize_lock/nosafepoint-2 -- possible deadlock" when using native heap trimmer
P4 JDK-8374343 Fix SIGSEGV when lib/modules is unreadable
P4 JDK-8334502 gtest/GTestWrapper.java fails on armhf due to LogDecorations.iso8601_utctime_test
P4 JDK-8364106 Include java.runtime.version in thread dump output
P4 JDK-8343698 Linux x86_64 lto build gives a lot of warnings and fails lto-wrapper: fatal error: make returned 2 exit status
P4 JDK-8372615 Many container tests fail when running rootless on cgroup v1

hotspot/svc

Priority Bug Summary
P4 JDK-8387625 Add "dt_socket" to `CheckedFeatures.notImplemented` for Windows/ARM64

infrastructure

Priority Bug Summary
P3 JDK-8361950 Update to use jtreg 8
P3 JDK-8369488 Update to use jtreg 8.1
P3 JDK-8376355 Update to use jtreg 8.2.1
P4 JDK-8385508 Bump update version for OpenJDK: jdk-21.0.13

infrastructure/build

Priority Bug Summary
P4 JDK-8371893 [macOS] use dead_strip linker option to reduce binary size
P4 JDK-8306281 function isWsl() returns false on WSL2
P4 JDK-8247690 RunTest does not support running of JTREG manual tests

performance/libraries

Priority Bug Summary
P4 JDK-8353478 Update crypto microbenchmarks to cover ML-DSA, ML-KEM, and HSS algorithms

security-libs/java.security

Priority Bug Summary
P2 JDK-8345057 ML_KEM NamedParameterSpec constants removed by ML-DSA integration
P2 JDK-8342002 sun/security/tools/keytool/GenKeyPairSigner.java failed due to missing certificate output
P2 JDK-8356051 Update SignatureUtil.java with the new KnownOIDs
P3 JDK-8340327 A common framework to support public key algorithms with standard parameter sets
P3 JDK-8374886 CAInterop.java#microsoftrsa2017 test fails as EE certificate does not specify OCSP responder
P3 JDK-8298387 Implement JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
P3 JDK-8338587 Internal XOF Methods for SHAKE128 and SHAKE256
P3 JDK-8354305 SHAKE128 and SHAKE256 MessageDigest algorithms
P3 JDK-8345533 Switch ML-DSA implementation to FIPS 204 final
P3 JDK-8349017 Update ML tests to verify against ACVP 1.1.0.38 version
P4 JDK-8368677 acvp test should throw SkippedException when no ACVP-Server available
P4 JDK-8381771 Add a check for DNS label not to end with a hyphen
P4 JDK-8349759 Add unit test for CertificateBuilder and SimpleOCSPServer test utilities
P4 JDK-8367008 Algorithm identifiers for HmacSHA* should always have NULL as params
P4 JDK-8385584 CAInterop.java#buypassclass3ca fails with Intermediate Root CA not found in the chain
P4 JDK-8379515 draft-ietf-lamps-kyber-certificates is now RFC 9935
P4 JDK-8381937 Make exceptions in Java_sun_security_mscapi_CKeyPairGenerator generateCKeyPair more specific
P4 JDK-8347606 Optimize Java implementation of ML-DSA
P4 JDK-8387123 Remove LuxTrust Global Root CA
P4 JDK-8345512 Remove wrapper functions for intrinsics in PQC algorithms
P4 JDK-8333867 SHA3 performance can be improved
P4 JDK-8342442 Static ACVP sample tests

security-libs/javax.crypto

Priority Bug Summary
P2 JDK-8347938 Add Support for the Latest ML-KEM and ML-DSA Private Key Encodings
P3 JDK-8298390 Implement JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
P4 JDK-8189441 Define algorithm names for keys derived from KeyAgreement
P4 JDK-8350589 Investigate cleaner implementation of AArch64 ML-DSA intrinsic introduced in JDK-8348561
P4 JDK-8374755 ML-KEM's 12-bit decompression can be simplified on aarch64
P4 JDK-8347608 Optimize Java implementation of ML-KEM

security-libs/javax.crypto:pkcs11

Priority Bug Summary
P4 JDK-8368694 PKCS11-NSS generic keys generated by DH have leading zeroes stripped

security-libs/javax.net.ssl

Priority Bug Summary
P4 JDK-8361125 Fix typo in onTradAbsence

tools

Priority Bug Summary
P4 JDK-8387985 sun/tools/jstat shell tests fail on platforms that do not support ParallelGC