@@ -2970,6 +2970,171 @@ Does not perform any other validation checks on the certificate.
29702970
29712971## ` node:crypto ` module methods and properties
29722972
2973+ ### ` crypto.argon2(algorithm, parameters, callback) `
2974+
2975+ <!-- YAML
2976+ added: REPLACEME
2977+ -->
2978+
2979+ > Stability: 1.2 - Release candidate
2980+
2981+ * ` algorithm ` {string} Variant of Argon2, one of ` "argon2d" ` , ` "argon2i" ` or ` "argon2id" ` .
2982+ * ` parameters ` {Object}
2983+ * ` message ` {string|ArrayBuffer|Buffer|TypedArray|DataView} REQUIRED, this is the password for password
2984+ hashing applications of Argon2.
2985+ * ` nonce ` {string|ArrayBuffer|Buffer|TypedArray|DataView} REQUIRED, must be at
2986+ least 8 bytes long. This is the salt for password hashing applications of Argon2.
2987+ * ` parallelism ` {number} REQUIRED, degree of parallelism determines how many computational chains (lanes)
2988+ can be run. Must be greater than 1 and less than ` 2**24-1 ` .
2989+ * ` tagLength ` {number} REQUIRED, the length of the key to generate. Must be greater than 4 and
2990+ less than ` 2**32-1 ` .
2991+ * ` memory ` {number} REQUIRED, memory cost in 1KiB blocks. Must be greater than
2992+ ` 8 * parallelism ` and less than ` 2**32-1 ` . The actual number of blocks is rounded
2993+ down to the nearest multiple of ` 4 * parallelism ` .
2994+ * ` passes ` {number} REQUIRED, number of passes (iterations). Must be greater than 1 and less
2995+ than ` 2**32-1 ` .
2996+ * ` secret ` {string|ArrayBuffer|Buffer|TypedArray|DataView|undefined} OPTIONAL, Random additional input,
2997+ similar to the salt, that should ** NOT** be stored with the derived key. This is known as pepper in
2998+ password hashing applications. If used, must have a length not greater than ` 2**32-1 ` bytes.
2999+ * ` associatedData ` {string|ArrayBuffer|Buffer|TypedArray|DataView|undefined} OPTIONAL, Additional data to
3000+ be added to the hash, functionally equivalent to salt or secret, but meant for
3001+ non-random data. If used, must have a length not greater than ` 2**32-1 ` bytes.
3002+ * ` callback ` {Function}
3003+ * ` err ` {Error}
3004+ * ` derivedKey ` {Buffer}
3005+
3006+ Provides an asynchronous [ Argon2] [ ] implementation. Argon2 is a password-based
3007+ key derivation function that is designed to be expensive computationally and
3008+ memory-wise in order to make brute-force attacks unrewarding.
3009+
3010+ The ` nonce ` should be as unique as possible. It is recommended that a nonce is
3011+ random and at least 16 bytes long. See [ NIST SP 800-132] [ ] for details.
3012+
3013+ When passing strings for ` message ` , ` nonce ` , ` secret ` or ` associatedData ` , please
3014+ consider [ caveats when using strings as inputs to cryptographic APIs] [ ] .
3015+
3016+ The ` callback ` function is called with two arguments: ` err ` and ` derivedKey ` .
3017+ ` err ` is an exception object when key derivation fails, otherwise ` err ` is
3018+ ` null ` . ` derivedKey ` is passed to the callback as a [ ` Buffer ` ] [ ] .
3019+
3020+ An exception is thrown when any of the input arguments specify invalid values
3021+ or types.
3022+
3023+ ``` mjs
3024+ const { argon2 , randomBytes } = await import (' node:crypto' );
3025+
3026+ const parameters = {
3027+ message: ' password' ,
3028+ nonce: randomBytes (16 ),
3029+ parallelism: 4 ,
3030+ tagLength: 64 ,
3031+ memory: 65536 ,
3032+ passes: 3 ,
3033+ };
3034+
3035+ argon2 (' argon2id' , parameters, (err , derivedKey ) => {
3036+ if (err) throw err;
3037+ console .log (derivedKey .toString (' hex' )); // 'af91dad...9520f15'
3038+ });
3039+ ```
3040+
3041+ ``` cjs
3042+ const { argon2 , randomBytes } = require (' node:crypto' );
3043+
3044+ const parameters = {
3045+ message: ' password' ,
3046+ nonce: randomBytes (16 ),
3047+ parallelism: 4 ,
3048+ tagLength: 64 ,
3049+ memory: 65536 ,
3050+ passes: 3 ,
3051+ };
3052+
3053+ argon2 (' argon2id' , parameters, (err , derivedKey ) => {
3054+ if (err) throw err;
3055+ console .log (derivedKey .toString (' hex' )); // 'af91dad...9520f15'
3056+ });
3057+ ```
3058+
3059+ ### ` crypto.argon2Sync(algorithm, parameters) `
3060+
3061+ <!-- YAML
3062+ added: REPLACEME
3063+ -->
3064+
3065+ > Stability: 1.2 - Release candidate
3066+
3067+ * ` algorithm ` {string} Variant of Argon2, one of ` "argon2d" ` , ` "argon2i" ` or ` "argon2id" ` .
3068+ * ` parameters ` {Object}
3069+ * ` message ` {string|ArrayBuffer|Buffer|TypedArray|DataView} REQUIRED, this is the password for password
3070+ hashing applications of Argon2.
3071+ * ` nonce ` {string|ArrayBuffer|Buffer|TypedArray|DataView} REQUIRED, must be at
3072+ least 8 bytes long. This is the salt for password hashing applications of Argon2.
3073+ * ` parallelism ` {number} REQUIRED, degree of parallelism determines how many computational chains (lanes)
3074+ can be run. Must be greater than 1 and less than ` 2**24-1 ` .
3075+ * ` tagLength ` {number} REQUIRED, the length of the key to generate. Must be greater than 4 and
3076+ less than ` 2**32-1 ` .
3077+ * ` memory ` {number} REQUIRED, memory cost in 1KiB blocks. Must be greater than
3078+ ` 8 * parallelism ` and less than ` 2**32-1 ` . The actual number of blocks is rounded
3079+ down to the nearest multiple of ` 4 * parallelism ` .
3080+ * ` passes ` {number} REQUIRED, number of passes (iterations). Must be greater than 1 and less
3081+ than ` 2**32-1 ` .
3082+ * ` secret ` {string|ArrayBuffer|Buffer|TypedArray|DataView|undefined} OPTIONAL, Random additional input,
3083+ similar to the salt, that should ** NOT** be stored with the derived key. This is known as pepper in
3084+ password hashing applications. If used, must have a length not greater than ` 2**32-1 ` bytes.
3085+ * ` associatedData ` {string|ArrayBuffer|Buffer|TypedArray|DataView|undefined} OPTIONAL, Additional data to
3086+ be added to the hash, functionally equivalent to salt or secret, but meant for
3087+ non-random data. If used, must have a length not greater than ` 2**32-1 ` bytes.
3088+ * Returns: {Buffer}
3089+
3090+ Provides a synchronous [ Argon2] [ ] implementation. Argon2 is a password-based
3091+ key derivation function that is designed to be expensive computationally and
3092+ memory-wise in order to make brute-force attacks unrewarding.
3093+
3094+ The ` nonce ` should be as unique as possible. It is recommended that a nonce is
3095+ random and at least 16 bytes long. See [ NIST SP 800-132] [ ] for details.
3096+
3097+ When passing strings for ` message ` , ` nonce ` , ` secret ` or ` associatedData ` , please
3098+ consider [ caveats when using strings as inputs to cryptographic APIs] [ ] .
3099+
3100+ An exception is thrown when key derivation fails, otherwise the derived key is
3101+ returned as a [ ` Buffer ` ] [ ] .
3102+
3103+ An exception is thrown when any of the input arguments specify invalid values
3104+ or types.
3105+
3106+ ``` mjs
3107+ const { argon2Sync , randomBytes } = await import (' node:crypto' );
3108+
3109+ const parameters = {
3110+ message: ' password' ,
3111+ nonce: randomBytes (16 ),
3112+ parallelism: 4 ,
3113+ tagLength: 64 ,
3114+ memory: 65536 ,
3115+ passes: 3 ,
3116+ };
3117+
3118+ const derivedKey = argon2Sync (' argon2id' , parameters);
3119+ console .log (derivedKey .toString (' hex' )); // 'af91dad...9520f15'
3120+ ```
3121+
3122+ ``` cjs
3123+ const { argon2Sync , randomBytes } = require (' node:crypto' );
3124+
3125+ const parameters = {
3126+ message: ' password' ,
3127+ nonce: randomBytes (16 ),
3128+ parallelism: 4 ,
3129+ tagLength: 64 ,
3130+ memory: 65536 ,
3131+ passes: 3 ,
3132+ };
3133+
3134+ const derivedKey = argon2Sync (' argon2id' , parameters);
3135+ console .log (derivedKey .toString (' hex' )); // 'af91dad...9520f15'
3136+ ```
3137+
29733138### ` crypto.checkPrime(candidate[, options], callback) `
29743139
29753140<!-- YAML
@@ -6284,6 +6449,7 @@ See the [list of SSL OP Flags][] for details.
62846449[ `verify.verify()` ] : #verifyverifyobject-signature-signatureencoding
62856450[ `x509.fingerprint256` ] : #x509fingerprint256
62866451[ `x509.verify(publicKey)` ] : #x509verifypublickey
6452+ [ argon2 ] : https://www.rfc-editor.org/rfc/rfc9106.html
62876453[ asymmetric key types ] : #asymmetric-key-types
62886454[ caveats when using strings as inputs to cryptographic APIs ] : #using-strings-as-inputs-to-cryptographic-apis
62896455[ certificate object ] : tls.md#certificate-object
0 commit comments