crypto: support all ArrayBufferView types
PR-URL: https://github.com/nodejs/node/pull/12223 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
0c539faac3
commit
a8f460f12d
@ -62,7 +62,7 @@ const cert2 = crypto.Certificate();
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.11.8
|
added: v0.11.8
|
||||||
-->
|
-->
|
||||||
- `spkac` {string | Buffer | Uint8Array}
|
- `spkac` {string | Buffer | TypedArray | DataView}
|
||||||
- Returns {Buffer} The challenge component of the `spkac` data structure, which
|
- Returns {Buffer} The challenge component of the `spkac` data structure, which
|
||||||
includes a public key and a challenge.
|
includes a public key and a challenge.
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ console.log(challenge.toString('utf8'));
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.11.8
|
added: v0.11.8
|
||||||
-->
|
-->
|
||||||
- `spkac` {string | Buffer | Uint8Array}
|
- `spkac` {string | Buffer | TypedArray | DataView}
|
||||||
- Returns {Buffer} The public key component of the `spkac` data structure,
|
- Returns {Buffer} The public key component of the `spkac` data structure,
|
||||||
which includes a public key and a challenge.
|
which includes a public key and a challenge.
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ console.log(publicKey);
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.11.8
|
added: v0.11.8
|
||||||
-->
|
-->
|
||||||
- `spkac` {Buffer | Uint8Array}
|
- `spkac` {Buffer | TypedArray | DataView}
|
||||||
- Returns {boolean} `true` if the given `spkac` data structure is valid, `false`
|
- Returns {boolean} `true` if the given `spkac` data structure is valid, `false`
|
||||||
otherwise.
|
otherwise.
|
||||||
|
|
||||||
@ -234,15 +234,16 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
- `output_encoding` {string}
|
- `output_encoding` {string}
|
||||||
|
|
||||||
Updates the cipher with `data`. If the `input_encoding` argument is given,
|
Updates the cipher with `data`. If the `input_encoding` argument is given,
|
||||||
its value must be one of `'utf8'`, `'ascii'`, or `'latin1'` and the `data`
|
its value must be one of `'utf8'`, `'ascii'`, or `'latin1'` and the `data`
|
||||||
argument is a string using the specified encoding. If the `input_encoding`
|
argument is a string using the specified encoding. If the `input_encoding`
|
||||||
argument is not given, `data` must be a [`Buffer`][] or `Uint8Array`.
|
argument is not given, `data` must be a [`Buffer`][], `TypedArray`, or
|
||||||
If `data` is a [`Buffer`][] or `Uint8Array`, then `input_encoding` is ignored.
|
`DataView`. If `data` is a [`Buffer`][], `TypedArray`, or `DataView`, then
|
||||||
|
`input_encoding` is ignored.
|
||||||
|
|
||||||
The `output_encoding` specifies the output format of the enciphered
|
The `output_encoding` specifies the output format of the enciphered
|
||||||
data, and can be `'latin1'`, `'base64'` or `'hex'`. If the `output_encoding`
|
data, and can be `'latin1'`, `'base64'` or `'hex'`. If the `output_encoding`
|
||||||
@ -340,7 +341,7 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/9398
|
pr-url: https://github.com/nodejs/node/pull/9398
|
||||||
description: This method now returns a reference to `decipher`.
|
description: This method now returns a reference to `decipher`.
|
||||||
-->
|
-->
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
- Returns the {Cipher} for method chaining.
|
- Returns the {Cipher} for method chaining.
|
||||||
|
|
||||||
When using an authenticated encryption mode (only `GCM` is currently
|
When using an authenticated encryption mode (only `GCM` is currently
|
||||||
@ -357,7 +358,7 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/9398
|
pr-url: https://github.com/nodejs/node/pull/9398
|
||||||
description: This method now returns a reference to `decipher`.
|
description: This method now returns a reference to `decipher`.
|
||||||
-->
|
-->
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
- Returns the {Cipher} for method chaining.
|
- Returns the {Cipher} for method chaining.
|
||||||
|
|
||||||
When using an authenticated encryption mode (only `GCM` is currently
|
When using an authenticated encryption mode (only `GCM` is currently
|
||||||
@ -394,7 +395,7 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
- `output_encoding` {string}
|
- `output_encoding` {string}
|
||||||
|
|
||||||
@ -448,7 +449,7 @@ assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex'));
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.5.0
|
added: v0.5.0
|
||||||
-->
|
-->
|
||||||
- `other_public_key` {string | Buffer | Uint8Array}
|
- `other_public_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
- `output_encoding` {string}
|
- `output_encoding` {string}
|
||||||
|
|
||||||
@ -457,7 +458,8 @@ party's public key and returns the computed shared secret. The supplied
|
|||||||
key is interpreted using the specified `input_encoding`, and secret is
|
key is interpreted using the specified `input_encoding`, and secret is
|
||||||
encoded using specified `output_encoding`. Encodings can be
|
encoded using specified `output_encoding`. Encodings can be
|
||||||
`'latin1'`, `'hex'`, or `'base64'`. If the `input_encoding` is not
|
`'latin1'`, `'hex'`, or `'base64'`. If the `input_encoding` is not
|
||||||
provided, `other_public_key` is expected to be a [`Buffer`][] or `Uint8Array`.
|
provided, `other_public_key` is expected to be a [`Buffer`][],
|
||||||
|
`TypedArray`, or `DataView`.
|
||||||
|
|
||||||
If `output_encoding` is given a string is returned; otherwise, a
|
If `output_encoding` is given a string is returned; otherwise, a
|
||||||
[`Buffer`][] is returned.
|
[`Buffer`][] is returned.
|
||||||
@ -518,25 +520,25 @@ string is returned; otherwise a [`Buffer`][] is returned.
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.5.0
|
added: v0.5.0
|
||||||
-->
|
-->
|
||||||
- `private_key` {string | Buffer | Uint8Array}
|
- `private_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `encoding` {string}
|
- `encoding` {string}
|
||||||
|
|
||||||
Sets the Diffie-Hellman private key. If the `encoding` argument is provided
|
Sets the Diffie-Hellman private key. If the `encoding` argument is provided
|
||||||
and is either `'latin1'`, `'hex'`, or `'base64'`, `private_key` is expected
|
and is either `'latin1'`, `'hex'`, or `'base64'`, `private_key` is expected
|
||||||
to be a string. If no `encoding` is provided, `private_key` is expected
|
to be a string. If no `encoding` is provided, `private_key` is expected
|
||||||
to be a [`Buffer`][] or `Uint8Array`.
|
to be a [`Buffer`][], `TypedArray`, or `DataView`.
|
||||||
|
|
||||||
### diffieHellman.setPublicKey(public_key[, encoding])
|
### diffieHellman.setPublicKey(public_key[, encoding])
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.5.0
|
added: v0.5.0
|
||||||
-->
|
-->
|
||||||
- `public_key` {string | Buffer | Uint8Array}
|
- `public_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `encoding` {string}
|
- `encoding` {string}
|
||||||
|
|
||||||
Sets the Diffie-Hellman public key. If the `encoding` argument is provided
|
Sets the Diffie-Hellman public key. If the `encoding` argument is provided
|
||||||
and is either `'latin1'`, `'hex'` or `'base64'`, `public_key` is expected
|
and is either `'latin1'`, `'hex'` or `'base64'`, `public_key` is expected
|
||||||
to be a string. If no `encoding` is provided, `public_key` is expected
|
to be a string. If no `encoding` is provided, `public_key` is expected
|
||||||
to be a [`Buffer`][] or `Uint8Array`.
|
to be a [`Buffer`][], `TypedArray`, or `DataView`.
|
||||||
|
|
||||||
### diffieHellman.verifyError
|
### diffieHellman.verifyError
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
@ -593,7 +595,7 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `other_public_key` {string | Buffer | Uint8Array}
|
- `other_public_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
- `output_encoding` {string}
|
- `output_encoding` {string}
|
||||||
|
|
||||||
@ -602,7 +604,8 @@ party's public key and returns the computed shared secret. The supplied
|
|||||||
key is interpreted using specified `input_encoding`, and the returned secret
|
key is interpreted using specified `input_encoding`, and the returned secret
|
||||||
is encoded using the specified `output_encoding`. Encodings can be
|
is encoded using the specified `output_encoding`. Encodings can be
|
||||||
`'latin1'`, `'hex'`, or `'base64'`. If the `input_encoding` is not
|
`'latin1'`, `'hex'`, or `'base64'`. If the `input_encoding` is not
|
||||||
provided, `other_public_key` is expected to be a [`Buffer`][] or `Uint8Array`.
|
provided, `other_public_key` is expected to be a [`Buffer`][], `TypedArray`, or
|
||||||
|
`DataView`.
|
||||||
|
|
||||||
If `output_encoding` is given a string will be returned; otherwise a
|
If `output_encoding` is given a string will be returned; otherwise a
|
||||||
[`Buffer`][] is returned.
|
[`Buffer`][] is returned.
|
||||||
@ -658,13 +661,14 @@ returned.
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.11.14
|
added: v0.11.14
|
||||||
-->
|
-->
|
||||||
- `private_key` {string | Buffer | Uint8Array}
|
- `private_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `encoding` {string}
|
- `encoding` {string}
|
||||||
|
|
||||||
Sets the EC Diffie-Hellman private key. The `encoding` can be `'latin1'`,
|
Sets the EC Diffie-Hellman private key. The `encoding` can be `'latin1'`,
|
||||||
`'hex'` or `'base64'`. If `encoding` is provided, `private_key` is expected
|
`'hex'` or `'base64'`. If `encoding` is provided, `private_key` is expected
|
||||||
to be a string; otherwise `private_key` is expected to be a [`Buffer`][]
|
to be a string; otherwise `private_key` is expected to be a [`Buffer`][],
|
||||||
or `Uint8Array`.
|
`TypedArray`, or `DataView`.
|
||||||
|
|
||||||
If `private_key` is not valid for the curve specified when the `ECDH` object was
|
If `private_key` is not valid for the curve specified when the `ECDH` object was
|
||||||
created, an error is thrown. Upon setting the private key, the associated
|
created, an error is thrown. Upon setting the private key, the associated
|
||||||
public point (key) is also generated and set in the ECDH object.
|
public point (key) is also generated and set in the ECDH object.
|
||||||
@ -677,12 +681,12 @@ deprecated: v5.2.0
|
|||||||
|
|
||||||
> Stability: 0 - Deprecated
|
> Stability: 0 - Deprecated
|
||||||
|
|
||||||
- `public_key` {string | Buffer | Uint8Array}
|
- `public_key` {string | Buffer | TypedArray | DataView}
|
||||||
- `encoding` {string}
|
- `encoding` {string}
|
||||||
|
|
||||||
Sets the EC Diffie-Hellman public key. Key encoding can be `'latin1'`,
|
Sets the EC Diffie-Hellman public key. Key encoding can be `'latin1'`,
|
||||||
`'hex'` or `'base64'`. If `encoding` is provided `public_key` is expected to
|
`'hex'` or `'base64'`. If `encoding` is provided `public_key` is expected to
|
||||||
be a string; otherwise a [`Buffer`][] or `Uint8Array` is expected.
|
be a string; otherwise a [`Buffer`][], `TypedArray`, or `DataView` is expected.
|
||||||
|
|
||||||
Note that there is not normally a reason to call this method because `ECDH`
|
Note that there is not normally a reason to call this method because `ECDH`
|
||||||
only requires a private key and the other party's public key to compute the
|
only requires a private key and the other party's public key to compute the
|
||||||
@ -795,14 +799,14 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
|
|
||||||
Updates the hash content with the given `data`, the encoding of which
|
Updates the hash content with the given `data`, the encoding of which
|
||||||
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
||||||
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
||||||
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][] or `Uint8Array`
|
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][], `TypedArray`, or
|
||||||
then `input_encoding` is ignored.
|
`DataView`, then `input_encoding` is ignored.
|
||||||
|
|
||||||
This can be called many times with new data as it is streamed.
|
This can be called many times with new data as it is streamed.
|
||||||
|
|
||||||
@ -884,14 +888,14 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
|
|
||||||
Updates the `Hmac` content with the given `data`, the encoding of which
|
Updates the `Hmac` content with the given `data`, the encoding of which
|
||||||
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
||||||
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
||||||
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][] or `Uint8Array`
|
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][], `TypedArray`, or
|
||||||
then `input_encoding` is ignored.
|
`DataView`, then `input_encoding` is ignored.
|
||||||
|
|
||||||
This can be called many times with new data as it is streamed.
|
This can be called many times with new data as it is streamed.
|
||||||
|
|
||||||
@ -1010,14 +1014,14 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
|
|
||||||
Updates the `Sign` content with the given `data`, the encoding of which
|
Updates the `Sign` content with the given `data`, the encoding of which
|
||||||
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
||||||
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
||||||
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][] or `Uint8Array`
|
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][], `TypedArray`, or
|
||||||
then `input_encoding` is ignored.
|
`DataView`, then `input_encoding` is ignored.
|
||||||
|
|
||||||
This can be called many times with new data as it is streamed.
|
This can be called many times with new data as it is streamed.
|
||||||
|
|
||||||
@ -1074,14 +1078,14 @@ changes:
|
|||||||
pr-url: https://github.com/nodejs/node/pull/5522
|
pr-url: https://github.com/nodejs/node/pull/5522
|
||||||
description: The default `input_encoding` changed from `binary` to `utf8`.
|
description: The default `input_encoding` changed from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `data` {string | Buffer | Uint8Array}
|
- `data` {string | Buffer | TypedArray | DataView}
|
||||||
- `input_encoding` {string}
|
- `input_encoding` {string}
|
||||||
|
|
||||||
Updates the `Verify` content with the given `data`, the encoding of which
|
Updates the `Verify` content with the given `data`, the encoding of which
|
||||||
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
is given in `input_encoding` and can be `'utf8'`, `'ascii'` or
|
||||||
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
`'latin1'`. If `encoding` is not provided, and the `data` is a string, an
|
||||||
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][] or `Uint8Array`
|
encoding of `'utf8'` is enforced. If `data` is a [`Buffer`][], `TypedArray`, or
|
||||||
then `input_encoding` is ignored.
|
`DataView`, then `input_encoding` is ignored.
|
||||||
|
|
||||||
This can be called many times with new data as it is streamed.
|
This can be called many times with new data as it is streamed.
|
||||||
|
|
||||||
@ -1094,7 +1098,7 @@ changes:
|
|||||||
description: Support for RSASSA-PSS and additional options was added.
|
description: Support for RSASSA-PSS and additional options was added.
|
||||||
-->
|
-->
|
||||||
- `object` {string | Object}
|
- `object` {string | Object}
|
||||||
- `signature` {string | Buffer | Uint8Array}
|
- `signature` {string | Buffer | TypedArray | DataView}
|
||||||
- `signature_format` {string}
|
- `signature_format` {string}
|
||||||
|
|
||||||
Verifies the provided data using the given `object` and `signature`.
|
Verifies the provided data using the given `object` and `signature`.
|
||||||
@ -1118,8 +1122,8 @@ or an object with one or more of the following properties:
|
|||||||
The `signature` argument is the previously calculated signature for the data, in
|
The `signature` argument is the previously calculated signature for the data, in
|
||||||
the `signature_format` which can be `'latin1'`, `'hex'` or `'base64'`.
|
the `signature_format` which can be `'latin1'`, `'hex'` or `'base64'`.
|
||||||
If a `signature_format` is specified, the `signature` is expected to be a
|
If a `signature_format` is specified, the `signature` is expected to be a
|
||||||
string; otherwise `signature` is expected to be a [`Buffer`][] or
|
string; otherwise `signature` is expected to be a [`Buffer`][],
|
||||||
`Uint8Array`.
|
`TypedArray`, or `DataView`.
|
||||||
|
|
||||||
Returns `true` or `false` depending on the validity of the signature for
|
Returns `true` or `false` depending on the validity of the signature for
|
||||||
the data and public key.
|
the data and public key.
|
||||||
@ -1167,7 +1171,7 @@ currently in use. Setting to true requires a FIPS build of Node.js.
|
|||||||
added: v0.1.94
|
added: v0.1.94
|
||||||
-->
|
-->
|
||||||
- `algorithm` {string}
|
- `algorithm` {string}
|
||||||
- `password` {string | Buffer | Uint8Array}
|
- `password` {string | Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Creates and returns a `Cipher` object that uses the given `algorithm` and
|
Creates and returns a `Cipher` object that uses the given `algorithm` and
|
||||||
`password`.
|
`password`.
|
||||||
@ -1177,8 +1181,8 @@ recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
|||||||
available cipher algorithms.
|
available cipher algorithms.
|
||||||
|
|
||||||
The `password` is used to derive the cipher key and initialization vector (IV).
|
The `password` is used to derive the cipher key and initialization vector (IV).
|
||||||
The value must be either a `'latin1'` encoded string, a [`Buffer`][] or a
|
The value must be either a `'latin1'` encoded string, a [`Buffer`][], a
|
||||||
`Uint8Array`.
|
`TypedArray`, or a `DataView`.
|
||||||
|
|
||||||
The implementation of `crypto.createCipher()` derives keys using the OpenSSL
|
The implementation of `crypto.createCipher()` derives keys using the OpenSSL
|
||||||
function [`EVP_BytesToKey`][] with the digest algorithm set to MD5, one
|
function [`EVP_BytesToKey`][] with the digest algorithm set to MD5, one
|
||||||
@ -1194,8 +1198,8 @@ to create the `Cipher` object.
|
|||||||
|
|
||||||
### crypto.createCipheriv(algorithm, key, iv)
|
### crypto.createCipheriv(algorithm, key, iv)
|
||||||
- `algorithm` {string}
|
- `algorithm` {string}
|
||||||
- `key` {string | Buffer | Uint8Array}
|
- `key` {string | Buffer | TypedArray | DataView}
|
||||||
- `iv` {string | Buffer | Uint8Array}
|
- `iv` {string | Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Creates and returns a `Cipher` object, with the given `algorithm`, `key` and
|
Creates and returns a `Cipher` object, with the given `algorithm`, `key` and
|
||||||
initialization vector (`iv`).
|
initialization vector (`iv`).
|
||||||
@ -1206,7 +1210,7 @@ available cipher algorithms.
|
|||||||
|
|
||||||
The `key` is the raw key used by the `algorithm` and `iv` is an
|
The `key` is the raw key used by the `algorithm` and `iv` is an
|
||||||
[initialization vector][]. Both arguments must be `'utf8'` encoded strings,
|
[initialization vector][]. Both arguments must be `'utf8'` encoded strings,
|
||||||
[Buffers][`Buffer`] or `Uint8Array`s.
|
[Buffers][`Buffer`], `TypedArray`, or `DataView`s.
|
||||||
|
|
||||||
### crypto.createCredentials(details)
|
### crypto.createCredentials(details)
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
@ -1231,7 +1235,7 @@ called.
|
|||||||
added: v0.1.94
|
added: v0.1.94
|
||||||
-->
|
-->
|
||||||
- `algorithm` {string}
|
- `algorithm` {string}
|
||||||
- `password` {string | Buffer | Uint8Array}
|
- `password` {string | Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Creates and returns a `Decipher` object that uses the given `algorithm` and
|
Creates and returns a `Decipher` object that uses the given `algorithm` and
|
||||||
`password` (key).
|
`password` (key).
|
||||||
@ -1253,8 +1257,8 @@ to create the `Decipher` object.
|
|||||||
added: v0.1.94
|
added: v0.1.94
|
||||||
-->
|
-->
|
||||||
- `algorithm` {string}
|
- `algorithm` {string}
|
||||||
- `key` {string | Buffer | Uint8Array}
|
- `key` {string | Buffer | TypedArray | DataView}
|
||||||
- `iv` {string | Buffer | Uint8Array}
|
- `iv` {string | Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Creates and returns a `Decipher` object that uses the given `algorithm`, `key`
|
Creates and returns a `Decipher` object that uses the given `algorithm`, `key`
|
||||||
and initialization vector (`iv`).
|
and initialization vector (`iv`).
|
||||||
@ -1271,6 +1275,9 @@ The `key` is the raw key used by the `algorithm` and `iv` is an
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.11.12
|
added: v0.11.12
|
||||||
changes:
|
changes:
|
||||||
|
- version: REPLACEME
|
||||||
|
pr-url: REPLACEME
|
||||||
|
description: The `prime` argument can be any `TypedArray` or `DataView` now.
|
||||||
- version: REPLACEME
|
- version: REPLACEME
|
||||||
pr-url: https://github.com/nodejs/node/pull/11983
|
pr-url: https://github.com/nodejs/node/pull/11983
|
||||||
description: The `prime` argument can be a `Uint8Array` now.
|
description: The `prime` argument can be a `Uint8Array` now.
|
||||||
@ -1279,9 +1286,9 @@ changes:
|
|||||||
description: The default for the encoding parameters changed
|
description: The default for the encoding parameters changed
|
||||||
from `binary` to `utf8`.
|
from `binary` to `utf8`.
|
||||||
-->
|
-->
|
||||||
- `prime` {string | Buffer | Uint8Array}
|
- `prime` {string | Buffer | TypedArray | DataView}
|
||||||
- `prime_encoding` {string}
|
- `prime_encoding` {string}
|
||||||
- `generator` {number | string | Buffer | Uint8Array} Defaults to `2`.
|
- `generator` {number | string | Buffer | TypedArray | DataView} Defaults to `2`.
|
||||||
- `generator_encoding` {string}
|
- `generator_encoding` {string}
|
||||||
|
|
||||||
Creates a `DiffieHellman` key exchange object using the supplied `prime` and an
|
Creates a `DiffieHellman` key exchange object using the supplied `prime` and an
|
||||||
@ -1294,17 +1301,17 @@ The `prime_encoding` and `generator_encoding` arguments can be `'latin1'`,
|
|||||||
`'hex'`, or `'base64'`.
|
`'hex'`, or `'base64'`.
|
||||||
|
|
||||||
If `prime_encoding` is specified, `prime` is expected to be a string; otherwise
|
If `prime_encoding` is specified, `prime` is expected to be a string; otherwise
|
||||||
a [`Buffer`][] or `Uint8Array` is expected.
|
a [`Buffer`][], `TypedArray`, or `DataView` is expected.
|
||||||
|
|
||||||
If `generator_encoding` is specified, `generator` is expected to be a string;
|
If `generator_encoding` is specified, `generator` is expected to be a string;
|
||||||
otherwise either a number or [`Buffer`][] or `Uint8Array` is expected.
|
otherwise a number, [`Buffer`][], `TypedArray`, or `DataView` is expected.
|
||||||
|
|
||||||
### crypto.createDiffieHellman(prime_length[, generator])
|
### crypto.createDiffieHellman(prime_length[, generator])
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v0.5.0
|
added: v0.5.0
|
||||||
-->
|
-->
|
||||||
- `prime_length` {number}
|
- `prime_length` {number}
|
||||||
- `generator` {number | string | Buffer | Uint8Array} Defaults to `2`.
|
- `generator` {number | string | Buffer | TypedArray | DataView} Defaults to `2`.
|
||||||
|
|
||||||
Creates a `DiffieHellman` key exchange object and generates a prime of
|
Creates a `DiffieHellman` key exchange object and generates a prime of
|
||||||
`prime_length` bits using an optional specific numeric `generator`.
|
`prime_length` bits using an optional specific numeric `generator`.
|
||||||
@ -1361,7 +1368,7 @@ input.on('readable', () => {
|
|||||||
added: v0.1.94
|
added: v0.1.94
|
||||||
-->
|
-->
|
||||||
- `algorithm` {string}
|
- `algorithm` {string}
|
||||||
- `key` {string | Buffer | Uint8Array}
|
- `key` {string | Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Creates and returns an `Hmac` object that uses the given `algorithm` and `key`.
|
Creates and returns an `Hmac` object that uses the given `algorithm` and `key`.
|
||||||
|
|
||||||
@ -1600,7 +1607,7 @@ added: v0.11.14
|
|||||||
- `padding` {crypto.constants} An optional padding value defined in
|
- `padding` {crypto.constants} An optional padding value defined in
|
||||||
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
||||||
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Decrypts `buffer` with `private_key`.
|
Decrypts `buffer` with `private_key`.
|
||||||
|
|
||||||
@ -1617,7 +1624,7 @@ added: v1.1.0
|
|||||||
- `padding` {crypto.constants} An optional padding value defined in
|
- `padding` {crypto.constants} An optional padding value defined in
|
||||||
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING` or
|
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING` or
|
||||||
`RSA_PKCS1_PADDING`.
|
`RSA_PKCS1_PADDING`.
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Encrypts `buffer` with `private_key`.
|
Encrypts `buffer` with `private_key`.
|
||||||
|
|
||||||
@ -1634,7 +1641,7 @@ added: v1.1.0
|
|||||||
- `padding` {crypto.constants} An optional padding value defined in
|
- `padding` {crypto.constants} An optional padding value defined in
|
||||||
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
||||||
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Decrypts `buffer` with `public_key`.
|
Decrypts `buffer` with `public_key`.
|
||||||
|
|
||||||
@ -1654,7 +1661,7 @@ added: v0.11.14
|
|||||||
- `padding` {crypto.constants} An optional padding value defined in
|
- `padding` {crypto.constants} An optional padding value defined in
|
||||||
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
`crypto.constants`, which may be: `crypto.constants.RSA_NO_PADDING`,
|
||||||
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
`RSA_PKCS1_PADDING`, or `crypto.constants.RSA_PKCS1_OAEP_PADDING`.
|
||||||
- `buffer` {Buffer | Uint8Array}
|
- `buffer` {Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Encrypts `buffer` with `public_key`.
|
Encrypts `buffer` with `public_key`.
|
||||||
|
|
||||||
@ -1739,16 +1746,16 @@ is a bit field taking one of or a mix of the following flags (defined in
|
|||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v6.6.0
|
added: v6.6.0
|
||||||
-->
|
-->
|
||||||
- `a` {Buffer | Uint8Array}
|
- `a` {Buffer | TypedArray | DataView}
|
||||||
- `b` {Buffer | Uint8Array}
|
- `b` {Buffer | TypedArray | DataView}
|
||||||
|
|
||||||
Returns true if `a` is equal to `b`, without leaking timing information that
|
Returns true if `a` is equal to `b`, without leaking timing information that
|
||||||
would allow an attacker to guess one of the values. This is suitable for
|
would allow an attacker to guess one of the values. This is suitable for
|
||||||
comparing HMAC digests or secret values like authentication cookies or
|
comparing HMAC digests or secret values like authentication cookies or
|
||||||
[capability urls](https://www.w3.org/TR/capability-urls/).
|
[capability urls](https://www.w3.org/TR/capability-urls/).
|
||||||
|
|
||||||
`a` and `b` must both be `Buffer`s or `Uint8Array`s, and they must have the
|
`a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they
|
||||||
same length.
|
must have the same length.
|
||||||
|
|
||||||
**Note**: Use of `crypto.timingSafeEqual` does not guarantee that the
|
**Note**: Use of `crypto.timingSafeEqual` does not guarantee that the
|
||||||
*surrounding* code is timing-safe. Care should be taken to ensure that the
|
*surrounding* code is timing-safe. Care should be taken to ensure that the
|
||||||
|
@ -42,7 +42,6 @@ const timingSafeEqual = binding.timingSafeEqual;
|
|||||||
const Buffer = require('buffer').Buffer;
|
const Buffer = require('buffer').Buffer;
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const { isUint8Array } = process.binding('util');
|
|
||||||
const LazyTransform = require('internal/streams/lazy_transform');
|
const LazyTransform = require('internal/streams/lazy_transform');
|
||||||
|
|
||||||
const DH_GENERATOR = 2;
|
const DH_GENERATOR = 2;
|
||||||
@ -415,9 +414,9 @@ function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) {
|
|||||||
|
|
||||||
if (typeof sizeOrKey !== 'number' &&
|
if (typeof sizeOrKey !== 'number' &&
|
||||||
typeof sizeOrKey !== 'string' &&
|
typeof sizeOrKey !== 'string' &&
|
||||||
!isUint8Array(sizeOrKey)) {
|
!ArrayBuffer.isView(sizeOrKey)) {
|
||||||
throw new TypeError('First argument should be number, string, ' +
|
throw new TypeError('First argument should be number, string, ' +
|
||||||
'Uint8Array or Buffer');
|
'Buffer, TypedArray, or DataView');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyEncoding) {
|
if (keyEncoding) {
|
||||||
|
@ -23,8 +23,9 @@ assert.strictEqual(secret2.toString('base64'), secret1);
|
|||||||
assert.strictEqual(dh1.verifyError, 0);
|
assert.strictEqual(dh1.verifyError, 0);
|
||||||
assert.strictEqual(dh2.verifyError, 0);
|
assert.strictEqual(dh2.verifyError, 0);
|
||||||
|
|
||||||
const argumentsError =
|
const argumentsError = new RegExp('^TypeError: First argument should be ' +
|
||||||
/^TypeError: First argument should be number, string, Uint8Array or Buffer$/;
|
'number, string, Buffer, TypedArray, or ' +
|
||||||
|
'DataView$');
|
||||||
|
|
||||||
assert.throws(() => {
|
assert.throws(() => {
|
||||||
crypto.createDiffieHellman([0x1, 0x2]);
|
crypto.createDiffieHellman([0x1, 0x2]);
|
||||||
@ -126,23 +127,10 @@ const modp2buf = Buffer.from([
|
|||||||
assert.strictEqual(exmodp2.verifyError, DH_NOT_SUITABLE_GENERATOR);
|
assert.strictEqual(exmodp2.verifyError, DH_NOT_SUITABLE_GENERATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
for (const buf of [modp2buf, ...common.getArrayBufferViews(modp2buf)]) {
|
||||||
// Ensure specific generator (string with encoding) works as expected.
|
// Ensure specific generator (string with encoding) works as expected with
|
||||||
const exmodp2 = crypto.createDiffieHellman(modp2buf, '02', 'hex');
|
// any ArrayBufferViews as the first argument to createDiffieHellman().
|
||||||
exmodp2.generateKeys();
|
const exmodp2 = crypto.createDiffieHellman(buf, '02', 'hex');
|
||||||
const modp2Secret = modp2.computeSecret(exmodp2.getPublicKey())
|
|
||||||
.toString('hex');
|
|
||||||
const exmodp2Secret = exmodp2.computeSecret(modp2.getPublicKey())
|
|
||||||
.toString('hex');
|
|
||||||
assert.strictEqual(modp2Secret, exmodp2Secret);
|
|
||||||
assert.strictEqual(exmodp2.verifyError, DH_NOT_SUITABLE_GENERATOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// Ensure specific generator (string with encoding) works as expected,
|
|
||||||
// with a Uint8Array as the first argument to createDiffieHellman().
|
|
||||||
const exmodp2 = crypto.createDiffieHellman(new Uint8Array(modp2buf),
|
|
||||||
'02', 'hex');
|
|
||||||
exmodp2.generateKeys();
|
exmodp2.generateKeys();
|
||||||
const modp2Secret = modp2.computeSecret(exmodp2.getPublicKey())
|
const modp2Secret = modp2.computeSecret(exmodp2.getPublicKey())
|
||||||
.toString('hex');
|
.toString('hex');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user