crypto: support ML-DSA KeyObject, sign, and verify · nodejs/node@38aedfb
@@ -1916,6 +1916,9 @@ This can be called many times with new data as it is streamed.
19161916<!-- YAML
19171917added: v11.6.0
19181918changes:
1919+ - version: REPLACEME
1920+ pr-url: https://github.com/nodejs/node/pull/59259
1921+ description: Add support for ML-DSA keys.
19191922 - version:
19201923 - v14.5.0
19211924 - v12.19.0
@@ -2021,6 +2024,9 @@ Other key details might be exposed via this API using additional attributes.
20212024<!-- YAML
20222025added: v11.6.0
20232026changes:
2027+ - version: REPLACEME
2028+ pr-url: https://github.com/nodejs/node/pull/59259
2029+ description: Add support for ML-DSA keys.
20242030 - version:
20252031 - v13.9.0
20262032 - v12.17.0
@@ -2055,6 +2061,9 @@ types are:
20552061* `'ed25519'` (OID 1.3.101.112)
20562062* `'ed448'` (OID 1.3.101.113)
20572063* `'dh'` (OID 1.2.840.113549.1.3.1)
2064+* `'ml-dsa-44'`[^openssl35] (OID 2.16.840.1.101.3.4.3.17)
2065+* `'ml-dsa-65'`[^openssl35] (OID 2.16.840.1.101.3.4.3.18)
2066+* `'ml-dsa-87'`[^openssl35] (OID 2.16.840.1.101.3.4.3.19)
2058206720592068This property is `undefined` for unrecognized `KeyObject` types and symmetric
20602069keys.
@@ -3403,6 +3412,9 @@ input.on('readable', () => {
34033412<!-- YAML
34043413added: v11.6.0
34053414changes:
3415+ - version: REPLACEME
3416+ pr-url: https://github.com/nodejs/node/pull/59259
3417+ description: Add support for ML-DSA keys.
34063418 - version: v15.12.0
34073419 pr-url: https://github.com/nodejs/node/pull/37254
34083420 description: The key can also be a JWK object.
@@ -3439,6 +3451,9 @@ of the passphrase is limited to 1024 bytes.
34393451<!-- YAML
34403452added: v11.6.0
34413453changes:
3454+ - version: REPLACEME
3455+ pr-url: https://github.com/nodejs/node/pull/59259
3456+ description: Add support for ML-DSA keys.
34423457 - version: v15.12.0
34433458 pr-url: https://github.com/nodejs/node/pull/37254
34443459 description: The key can also be a JWK object.
@@ -3648,6 +3663,9 @@ underlying hash function. See [`crypto.createHmac()`][] for more information.
36483663<!-- YAML
36493664added: v10.12.0
36503665changes:
3666+ - version: REPLACEME
3667+ pr-url: https://github.com/nodejs/node/pull/59259
3668+ description: Add support for ML-DSA key pairs.
36513669 - version: v18.0.0
36523670 pr-url: https://github.com/nodejs/node/pull/41678
36533671 description: Passing an invalid callback to the `callback` argument
@@ -3678,7 +3696,8 @@ changes:
36783696-->
3679369736803698* `type` {string} Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`,
3681-`'ed448'`, `'x25519'`, `'x448'`, or `'dh'`.
3699+`'ed448'`, `'x25519'`, `'x448'`, `'dh'`, `'ml-dsa-44'`[^openssl35],
3700+`'ml-dsa-65'`[^openssl35], or `'ml-dsa-87'`[^openssl35].
36823701* `options` {Object}
36833702* `modulusLength` {number} Key size in bits (RSA, DSA).
36843703* `publicExponent` {number} Public exponent (RSA). **Default:** `0x10001`.
@@ -3767,6 +3786,9 @@ a `Promise` for an `Object` with `publicKey` and `privateKey` properties.
37673786<!-- YAML
37683787added: v10.12.0
37693788changes:
3789+ - version: REPLACEME
3790+ pr-url: https://github.com/nodejs/node/pull/59259
3791+ description: Add support for ML-DSA key pairs.
37703792 - version: v16.10.0
37713793 pr-url: https://github.com/nodejs/node/pull/39927
37723794 description: Add ability to define `RSASSA-PSS-params` sequence parameters
@@ -3792,7 +3814,8 @@ changes:
37923814-->
3793381537943816* `type` {string} Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`,
3795-`'ed448'`, `'x25519'`, `'x448'`, or `'dh'`.
3817+`'ed448'`, `'x25519'`, `'x448'`, `'dh'`, `'ml-dsa-44'`[^openssl35],
3818+`'ml-dsa-65'`[^openssl35], or `'ml-dsa-87'`[^openssl35].
37963819* `options` {Object}
37973820* `modulusLength` {number} Key size in bits (RSA, DSA).
37983821* `publicExponent` {number} Public exponent (RSA). **Default:** `0x10001`.
@@ -3816,7 +3839,7 @@ changes:
38163839* `privateKey` {string | Buffer | KeyObject}
3817384038183841Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC,
3819-Ed25519, Ed448, X25519, X448, and DH are currently supported.
3842+Ed25519, Ed448, X25519, X448, DH, and ML-DSA[^openssl35] are currently supported.
3820384338213844If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function
38223845behaves as if [`keyObject.export()`][] had been called on its result. Otherwise,
@@ -5416,6 +5439,9 @@ Throws an error if FIPS mode is not available.
54165439<!-- YAML
54175440added: v12.0.0
54185441changes:
5442+ - version: REPLACEME
5443+ pr-url: https://github.com/nodejs/node/pull/59259
5444+ description: Add support for ML-DSA signing.
54195445 - version: v18.0.0
54205446 pr-url: https://github.com/nodejs/node/pull/41678
54215447 description: Passing an invalid callback to the `callback` argument
@@ -5445,7 +5471,10 @@ changes:
5445547154465472Calculates and returns the signature for `data` using the given private key and
54475473algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
5448-dependent upon the key type (especially Ed25519 and Ed448).
5474+dependent upon the key type.
5475+5476+`algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and
5477+ML-DSA.
5449547854505479If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
54515480passed to [`crypto.createPrivateKey()`][]. If it is an object, the following
@@ -5526,6 +5555,9 @@ not introduce timing vulnerabilities.
55265555<!-- YAML
55275556added: v12.0.0
55285557changes:
5558+ - version: REPLACEME
5559+ pr-url: https://github.com/nodejs/node/pull/59259
5560+ description: Add support for ML-DSA signature verification.
55295561 - version: v18.0.0
55305562 pr-url: https://github.com/nodejs/node/pull/41678
55315563 description: Passing an invalid callback to the `callback` argument
@@ -5561,7 +5593,10 @@ changes:
5561559355625594Verifies the given signature for `data` using the given key and algorithm. If
55635595`algorithm` is `null` or `undefined`, then the algorithm is dependent upon the
5564-key type (especially Ed25519 and Ed448).
5596+key type.
5597+5598+`algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and
5599+ML-DSA.
5565560055665601If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
55675602passed to [`crypto.createPublicKey()`][]. If it is an object, the following
@@ -6150,6 +6185,8 @@ See the [list of SSL OP Flags][] for details.
61506185</tr>
61516186</table>
615261876188+[^openssl35]: Requires OpenSSL >= 3.5
6189+61536190[AEAD algorithms]: https://en.wikipedia.org/wiki/Authenticated_encryption
61546191[CCM mode]: #ccm-mode
61556192[CVE-2021-44532]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44532