Summary
-------
Implementing the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) as defined in [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final) in the Java Platform.
Problem
-------
ML-DSA is a quantum-resistant digital signature algorithm selected by the National Institute of Standards and Technology (NIST) to ensure the security of cryptographic systems in the post-quantum era. Supporting ML-DSA is critical to future-proof applications running on the Java Platform against the emerging threat of quantum computing, which can potentially break current cryptographic algorithms.
Solution
--------
1. Define `ML-DSA` and its three standardized parameter sets (`ML-DSA-44`, `ML-DSA-65`, and `ML-DSA-87`) as [Java Security Standard Algorithm Names](https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html).
2. Implement `KeyPairGenerator`, `KeyFactory`, and `Signature` implementations of ML-DSA with these standardized parameter sets in the `SUN` security provider.
3. Create new `NamedParameterSpec` constants for `ML-DSA-44`, `ML-DSA-65`, and `ML-DSA-87`.
4. Add the algorithms to the `KeyPairGenerator`, `KeyFactory`, and `Signature` rows of [the SUN provider table of the JDK Security Providers Guide](https://docs.oracle.com/en/java/javase/23/security/oracle-providers.html#GUID-3A80CC46-91E1-4E47-AC51-CB7B782CEA7D).
Specification
-------------
First, in `src/java.base/share/classes/java/security/spec/NamedParameterSpec.java`, add the following lines:
+ /**
+ * The ML-DSA-44 parameters
+ *
+ * @since 24
+ */
+ public static final NamedParameterSpec ML_DSA_44
+ = new NamedParameterSpec("ML-DSA-44");
+
+ /**
+ * The ML-DSA-65 parameters
+ *
+ * @since 24
+ */
+ public static final NamedParameterSpec ML_DSA_65
+ = new NamedParameterSpec("ML-DSA-65");
+
+ /**
+ * The ML-DSA-87 parameters
+ *
+ * @since 24
+ */
+ public static final NamedParameterSpec ML_DSA_87
+ = new NamedParameterSpec("ML-DSA-87");
Second, in the Java Security Standard Algorithm Names document, add the following lines to the `KeyPairGenerator` section:
--------------- --------------------------------------------------------------
Algorithm Name Description
--------------- --------------------------------------------------------------
ML-DSA Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
This algorithm supports keys with ML-DSA-44, ML-DSA-65,
and ML-DSA-87 parameter sets.
ML-DSA-44 Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-44 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-65 Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-65 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-87 Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-87 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
Add the following lines to the `KeyFactory` section:
--------------- --------------------------------------------------------------
Algorithm Name Description
--------------- --------------------------------------------------------------
ML-DSA Keys for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
This algorithm supports keys with ML-DSA-44, ML-DSA-65,
and ML-DSA-87 parameter sets.
ML-DSA-44 Keys for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-44 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-65 Keys for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-65 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-87 Keys for the Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-87 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
Add the following lines to the `Signature` section:
------------------------------ --------------------------------------------------------------------------------------
Algorithm Name Description
------------------------------ --------------------------------------------------------------------------------------
ML-DSA The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
This algorithm supports keys with ML-DSA-44, ML-DSA-65,
and ML-DSA-87 parameter sets.
ML-DSA-44 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-44 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-65 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-65 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-87 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-87 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
Add the following lines to the `NamedParameterSpec` section:
------ -----------------------------------
Name Description
------ -----------------------------------
ML-DSA-44 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-44 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-65 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-65 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
ML-DSA-87 The Module-Lattice-Based Digital Signature Algorithm
(ML-DSA) using the ML-DSA-87 parameter set as defined in
[FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).