doc: improvements to crypto.markdown copy
Fix several typos. Add missing links. PR-URL: https://github.com/nodejs/node/pull/5230 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Kelvin Knighton <keltheceo@gmail.com> Reviewed-By: Roman Reiss <me@silverwind.io>
This commit is contained in:
parent
725ffdb9b7
commit
f0c06147b3
@ -55,7 +55,7 @@ console.log(challenge.toString('utf8'));
|
|||||||
// Prints the challenge as a UTF8 string
|
// Prints the challenge as a UTF8 string
|
||||||
```
|
```
|
||||||
|
|
||||||
### Certificate.exportPublicKey(spkac)
|
### certificate.exportPublicKey(spkac)
|
||||||
|
|
||||||
The `spkac` data structure includes a public key and a challenge. The
|
The `spkac` data structure includes a public key and a challenge. The
|
||||||
`certificate.exportPublicKey()` returns the public key component in the
|
`certificate.exportPublicKey()` returns the public key component in the
|
||||||
@ -70,7 +70,7 @@ console.log(publicKey);
|
|||||||
// Prints the public key as <Buffer ...>
|
// Prints the public key as <Buffer ...>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Certificate.verifySpkac(spkac)
|
### certificate.verifySpkac(spkac)
|
||||||
|
|
||||||
Returns `true` if the given `spkac` data structure is valid, `false` otherwise.
|
Returns `true` if the given `spkac` data structure is valid, `false` otherwise.
|
||||||
The `spkac` argument must be a Node.js [`Buffer`][].
|
The `spkac` argument must be a Node.js [`Buffer`][].
|
||||||
@ -89,12 +89,12 @@ used in one of two ways:
|
|||||||
|
|
||||||
- As a [stream][] that is both readable and writable, where plain unencrypted
|
- As a [stream][] that is both readable and writable, where plain unencrypted
|
||||||
data is written to produce encrypted data on the readable side, or
|
data is written to produce encrypted data on the readable side, or
|
||||||
- Using the `cipher.update()` and `cipher.final()` methods to produce the
|
- Using the [`cipher.update()`][] and [`cipher.final()`][] methods to produce
|
||||||
encrypted data.
|
the encrypted data.
|
||||||
|
|
||||||
The `crypto.createCipher()` or `crypto.createCipheriv()` methods are used to
|
The [`crypto.createCipher()`][] or [`crypto.createCipheriv()`][] methods are
|
||||||
create `Cipher` instances. `Cipher` objects are not to be created directly
|
used to create `Cipher` instances. `Cipher` objects are not to be created
|
||||||
using the `new` keyword.
|
directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Cipher` objects as streams:
|
Example: Using `Cipher` objects as streams:
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ const output = fs.createWriteStream('test.enc');
|
|||||||
input.pipe(cipher).pipe(output);
|
input.pipe(cipher).pipe(output);
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `cipher.update()` and `cipher.final()` methods:
|
Example: Using the [`cipher.update()`][] and [`cipher.final()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -155,7 +155,7 @@ once will result in an error being thrown.
|
|||||||
### cipher.setAAD(buffer)
|
### cipher.setAAD(buffer)
|
||||||
|
|
||||||
When using an authenticated encryption mode (only `GCM` is currently
|
When using an authenticated encryption mode (only `GCM` is currently
|
||||||
supported), the `cipher.getAAD()` method sets the value used for the
|
supported), the `cipher.setAAD()` method sets the value used for the
|
||||||
_additional authenticated data_ (AAD) input parameter.
|
_additional authenticated data_ (AAD) input parameter.
|
||||||
|
|
||||||
### cipher.getAuthTag()
|
### cipher.getAuthTag()
|
||||||
@ -165,7 +165,7 @@ supported), the `cipher.getAuthTag()` method returns a [`Buffer`][] containing
|
|||||||
the _authentication tag_ that has been computed from the given data.
|
the _authentication tag_ that has been computed from the given data.
|
||||||
|
|
||||||
The `cipher.getAuthTag()` method should only be called after encryption has
|
The `cipher.getAuthTag()` method should only be called after encryption has
|
||||||
been completed using the `cipher.final()` method.
|
been completed using the [`cipher.final()`][] method.
|
||||||
|
|
||||||
### cipher.setAutoPadding(auto_padding=true)
|
### cipher.setAutoPadding(auto_padding=true)
|
||||||
|
|
||||||
@ -174,11 +174,11 @@ add padding to the input data to the appropriate block size. To disable the
|
|||||||
default padding call `cipher.setAutoPadding(false)`.
|
default padding call `cipher.setAutoPadding(false)`.
|
||||||
|
|
||||||
When `auto_padding` is `false`, the length of the entire input data must be a
|
When `auto_padding` is `false`, the length of the entire input data must be a
|
||||||
multiple of the cipher's block size or `cipher.final()` will throw an Error.
|
multiple of the cipher's block size or [`cipher.final()`][] will throw an Error.
|
||||||
Disabling automatic padding is useful for non-standard padding, for instance
|
Disabling automatic padding is useful for non-standard padding, for instance
|
||||||
using `0x0` instead of PKCS padding.
|
using `0x0` instead of PKCS padding.
|
||||||
|
|
||||||
The `cipher.setAutoPadding()` method must be called before `cipher.final()`.
|
The `cipher.setAutoPadding()` method must be called before [`cipher.final()`][].
|
||||||
|
|
||||||
### cipher.update(data[, input_encoding][, output_encoding])
|
### cipher.update(data[, input_encoding][, output_encoding])
|
||||||
|
|
||||||
@ -194,8 +194,8 @@ is specified, a string using the specified encoding is returned. If no
|
|||||||
`output_encoding` is provided, a [`Buffer`][] is returned.
|
`output_encoding` is provided, a [`Buffer`][] is returned.
|
||||||
|
|
||||||
The `cipher.update()` method can be called multiple times with new data until
|
The `cipher.update()` method can be called multiple times with new data until
|
||||||
`cipher.final()` is called. Calling `cipher.update()` after `cipher.final()`
|
[`cipher.final()`][] is called. Calling `cipher.update()` after
|
||||||
will result in an error being thrown.
|
[`cipher.final()`][] will result in an error being thrown.
|
||||||
|
|
||||||
## Class: Decipher
|
## Class: Decipher
|
||||||
|
|
||||||
@ -204,11 +204,11 @@ used in one of two ways:
|
|||||||
|
|
||||||
- As a [stream][] that is both readable and writable, where plain encrypted
|
- As a [stream][] that is both readable and writable, where plain encrypted
|
||||||
data is written to produce unencrypted data on the readable side, or
|
data is written to produce unencrypted data on the readable side, or
|
||||||
- Using the `decipher.update()` and `decipher.final()` methods to produce the
|
- Using the [`decipher.update()`][] and [`decipher.final()`][] methods to
|
||||||
unencrypted data.
|
produce the unencrypted data.
|
||||||
|
|
||||||
The `crypto.createDecipher()` or `crypto.createDecipheriv()` methods are used
|
The [`crypto.createDecipher()`][] or [`crypto.createDecipheriv()`][] methods are
|
||||||
to create `Decipher` instances. `Decipher` objects are not to be created
|
used to create `Decipher` instances. `Decipher` objects are not to be created
|
||||||
directly using the `new` keyword.
|
directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Decipher` objects as streams:
|
Example: Using `Decipher` objects as streams:
|
||||||
@ -246,7 +246,7 @@ const output = fs.createWriteStream('test.js');
|
|||||||
input.pipe(decipher).pipe(output);
|
input.pipe(decipher).pipe(output);
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `decipher.update()` and `decipher.final()` methods:
|
Example: Using the [`decipher.update()`][] and [`decipher.final()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -272,28 +272,28 @@ than once will result in an error being thrown.
|
|||||||
### decipher.setAAD(buffer)
|
### decipher.setAAD(buffer)
|
||||||
|
|
||||||
When using an authenticated encryption mode (only `GCM` is currently
|
When using an authenticated encryption mode (only `GCM` is currently
|
||||||
supported), the `cipher.getAAD()` method sets the value used for the
|
supported), the `cipher.setAAD()` method sets the value used for the
|
||||||
_additional authenticated data_ (AAD) input parameter.
|
_additional authenticated data_ (AAD) input parameter.
|
||||||
|
|
||||||
### decipher.setAuthTag(buffer)
|
### decipher.setAuthTag(buffer)
|
||||||
|
|
||||||
When using an authenticated encryption mode (only `GCM` is currently
|
When using an authenticated encryption mode (only `GCM` is currently
|
||||||
supported), the `decipher.setAuthTag()` method is used to pass in the
|
supported), the `decipher.setAuthTag()` method is used to pass in the
|
||||||
received _authentication tag_. If no tag is provided, or if the ciphertext
|
received _authentication tag_. If no tag is provided, or if the cipher text
|
||||||
has been tampered with, `decipher.final()` with throw, indicating that the
|
has been tampered with, [`decipher.final()`][] with throw, indicating that the
|
||||||
ciphertext should be discarded due to failed authentication.
|
cipher text should be discarded due to failed authentication.
|
||||||
|
|
||||||
### decipher.setAutoPadding(auto_padding=true)
|
### decipher.setAutoPadding(auto_padding=true)
|
||||||
|
|
||||||
When data has been encrypted without standard block padding, calling
|
When data has been encrypted without standard block padding, calling
|
||||||
`decipher.setAuthPadding(false)` will disable automatic padding to prevent
|
`decipher.setAuthPadding(false)` will disable automatic padding to prevent
|
||||||
`decipher.final()` from checking for and removing padding.
|
[`decipher.final()`][] from checking for and removing padding.
|
||||||
|
|
||||||
Turning auto padding off will only work if the input data's length is a
|
Turning auto padding off will only work if the input data's length is a
|
||||||
multiple of the ciphers block size.
|
multiple of the ciphers block size.
|
||||||
|
|
||||||
The `decipher.setAutoPadding()` method must be called before
|
The `decipher.setAutoPadding()` method must be called before
|
||||||
`decipher.update()`.
|
[`decipher.update()`][].
|
||||||
|
|
||||||
### decipher.update(data[, input_encoding][, output_encoding])
|
### decipher.update(data[, input_encoding][, output_encoding])
|
||||||
|
|
||||||
@ -309,8 +309,8 @@ is specified, a string using the specified encoding is returned. If no
|
|||||||
`output_encoding` is provided, a [`Buffer`][] is returned.
|
`output_encoding` is provided, a [`Buffer`][] is returned.
|
||||||
|
|
||||||
The `decipher.update()` method can be called multiple times with new data until
|
The `decipher.update()` method can be called multiple times with new data until
|
||||||
`decipher.final()` is called. Calling `decipher.update()` after
|
[`decipher.final()`][] is called. Calling `decipher.update()` after
|
||||||
`decipher.final()` will result in an error being thrown.
|
[`decipher.final()`][] will result in an error being thrown.
|
||||||
|
|
||||||
## Class: DiffieHellman
|
## Class: DiffieHellman
|
||||||
|
|
||||||
@ -318,7 +318,7 @@ The `DiffieHellman` class is a utility for creating Diffie-Hellman key
|
|||||||
exchanges.
|
exchanges.
|
||||||
|
|
||||||
Instances of the `DiffieHellman` class can be created using the
|
Instances of the `DiffieHellman` class can be created using the
|
||||||
`crypto.createDiffieHellman()` function.
|
[`crypto.createDiffieHellman()`][] function.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -357,7 +357,7 @@ If `output_encoding` is given a string is returned; otherwise, a
|
|||||||
Generates private and public Diffie-Hellman key values, and returns
|
Generates private and public Diffie-Hellman key values, and returns
|
||||||
the public key in the specified `encoding`. This key should be
|
the public key in the specified `encoding`. This key should be
|
||||||
transferred to the other party. Encoding can be `'binary'`, `'hex'`,
|
transferred to the other party. Encoding can be `'binary'`, `'hex'`,
|
||||||
or `'base64'`. If `encoding` is provided a string is returned; otherwise a
|
or `'base64'`. If `encoding` is provided a string is returned; otherwise a
|
||||||
[`Buffer`][] is returned.
|
[`Buffer`][] is returned.
|
||||||
|
|
||||||
### diffieHellman.getGenerator([encoding])
|
### diffieHellman.getGenerator([encoding])
|
||||||
@ -417,7 +417,7 @@ The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH)
|
|||||||
key exchanges.
|
key exchanges.
|
||||||
|
|
||||||
Instances of the `ECDH` class can be created using the
|
Instances of the `ECDH` class can be created using the
|
||||||
`crypto.createECDH()` function.
|
[`crypto.createECDH()`][] function.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -439,7 +439,7 @@ assert(alice_secret, bob_secret);
|
|||||||
// OK
|
// OK
|
||||||
```
|
```
|
||||||
|
|
||||||
### ECDH.computeSecret(other_public_key[, input_encoding][, output_encoding])
|
### ecdh.computeSecret(other_public_key[, input_encoding][, output_encoding])
|
||||||
|
|
||||||
Computes the shared secret using `other_public_key` as the other
|
Computes the shared secret using `other_public_key` as the other
|
||||||
party's public key and returns the computed shared secret. The supplied
|
party's public key and returns the computed shared secret. The supplied
|
||||||
@ -451,7 +451,7 @@ provided, `other_public_key` is expected to be a [`Buffer`][].
|
|||||||
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.
|
||||||
|
|
||||||
### ECDH.generateKeys([encoding[, format]])
|
### ecdh.generateKeys([encoding[, format]])
|
||||||
|
|
||||||
Generates private and public EC Diffie-Hellman key values, and returns
|
Generates private and public EC Diffie-Hellman key values, and returns
|
||||||
the public key in the specified `format` and `encoding`. This key should be
|
the public key in the specified `format` and `encoding`. This key should be
|
||||||
@ -465,13 +465,13 @@ The `encoding` argument can be `'binary'`, `'hex'`, or `'base64'`. If
|
|||||||
`encoding` is provided a string is returned; otherwise a [`Buffer`][]
|
`encoding` is provided a string is returned; otherwise a [`Buffer`][]
|
||||||
is returned.
|
is returned.
|
||||||
|
|
||||||
### ECDH.getPrivateKey([encoding])
|
### ecdh.getPrivateKey([encoding])
|
||||||
|
|
||||||
Returns the EC Diffie-Hellman private key in the specified `encoding`,
|
Returns the EC Diffie-Hellman private key in the specified `encoding`,
|
||||||
which can be `'binary'`, `'hex'`, or `'base64'`. If `encoding` is provided
|
which can be `'binary'`, `'hex'`, or `'base64'`. If `encoding` is provided
|
||||||
a string is returned; otherwise a [`Buffer`][] is returned.
|
a string is returned; otherwise a [`Buffer`][] is returned.
|
||||||
|
|
||||||
### ECDH.getPublicKey([encoding[, format]])
|
### ecdh.getPublicKey([encoding[, format]])
|
||||||
|
|
||||||
Returns the EC Diffie-Hellman public key in the specified `encoding` and
|
Returns the EC Diffie-Hellman public key in the specified `encoding` and
|
||||||
`format`.
|
`format`.
|
||||||
@ -484,7 +484,7 @@ The `encoding` argument can be `'binary'`, `'hex'`, or `'base64'`. If
|
|||||||
`encoding` is specified, a string is returned; otherwise a [`Buffer`][] is
|
`encoding` is specified, a string is returned; otherwise a [`Buffer`][] is
|
||||||
returned.
|
returned.
|
||||||
|
|
||||||
### ECDH.setPrivateKey(private_key[, encoding])
|
### ecdh.setPrivateKey(private_key[, encoding])
|
||||||
|
|
||||||
Sets the EC Diffie-Hellman private key. The `encoding` can be `'binary'`,
|
Sets the EC Diffie-Hellman private key. The `encoding` can be `'binary'`,
|
||||||
`'hex'` or `'base64'`. If `encoding` is provided, `private_key` is expected
|
`'hex'` or `'base64'`. If `encoding` is provided, `private_key` is expected
|
||||||
@ -493,7 +493,7 @@ to be a string; otherwise `private_key` is expected to be a [`Buffer`][]. If
|
|||||||
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.
|
||||||
|
|
||||||
### ECDH.setPublicKey(public_key[, encoding])
|
### ecdh.setPublicKey(public_key[, encoding])
|
||||||
|
|
||||||
Stability: 0 - Deprecated
|
Stability: 0 - Deprecated
|
||||||
|
|
||||||
@ -503,9 +503,10 @@ be a string; otherwise a [`Buffer`][] 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
|
||||||
shared secret. Typically either `ecdh.generateKeys()` or `ecdh.setPrivateKey()`
|
shared secret. Typically either [`ecdh.generateKeys()`][] or
|
||||||
will be called. The `ecdh.setPrivateKey()` method attempts to generate the
|
[`ecdh.setPrivateKey()`][] will be called. The [`ecdh.setPrivateKey()`][] method
|
||||||
public point/key associated with the private key being set.
|
attempts to generate the public point/key associated with the private key being
|
||||||
|
set.
|
||||||
|
|
||||||
Example (obtaining a shared secret):
|
Example (obtaining a shared secret):
|
||||||
|
|
||||||
@ -538,10 +539,10 @@ used in one of two ways:
|
|||||||
|
|
||||||
- As a [stream][] that is both readable and writable, where data is written
|
- As a [stream][] that is both readable and writable, where data is written
|
||||||
to produce a computed hash digest on the readable side, or
|
to produce a computed hash digest on the readable side, or
|
||||||
- Using the `hash.update()` and `hash.digest()` methods to produce the
|
- Using the [`hash.update()`][] and [`hash.digest()`][] methods to produce the
|
||||||
computed hash.
|
computed hash.
|
||||||
|
|
||||||
The `crypto.createHash()` method is used to create `Hash` instances. `Hash`
|
The [`crypto.createHash()`][] method is used to create `Hash` instances. `Hash`
|
||||||
objects are not to be created directly using the `new` keyword.
|
objects are not to be created directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Hash` objects as streams:
|
Example: Using `Hash` objects as streams:
|
||||||
@ -573,7 +574,7 @@ const input = fs.createReadStream('test.js');
|
|||||||
input.pipe(hash).pipe(process.stdout);
|
input.pipe(hash).pipe(process.stdout);
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `hash.update()` and `hash.digest()` methods:
|
Example: Using the [`hash.update()`][] and [`hash.digest()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -588,8 +589,8 @@ console.log(hash.digest('hex'));
|
|||||||
### hash.digest([encoding])
|
### hash.digest([encoding])
|
||||||
|
|
||||||
Calculates the digest of all of the data passed to be hashed (using the
|
Calculates the digest of all of the data passed to be hashed (using the
|
||||||
`hash.update()` method). The `encoding` can be `'hex'`, `'binary'` or
|
[`hash.update()`][] method). The `encoding` can be `'hex'`, `'binary'` or
|
||||||
`'base64'`. If `encoding` is provided a string will be returned; otherwise
|
`'base64'`. If `encoding` is provided a string will be returned; otherwise
|
||||||
a [`Buffer`][] is returned.
|
a [`Buffer`][] is returned.
|
||||||
|
|
||||||
The `Hash` object can not be used again after `hash.digest()` method has been
|
The `Hash` object can not be used again after `hash.digest()` method has been
|
||||||
@ -599,7 +600,7 @@ called. Multiple calls will cause an error to be thrown.
|
|||||||
|
|
||||||
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
|
||||||
`'binary'`. If `encoding` is not provided, and the `data` is a string, an
|
`'binary'`. If `encoding` is not provided, and the `data` is a string, an
|
||||||
encoding of `'binary'` is enforced. If `data` is a [`Buffer`][] then
|
encoding of `'binary'` is enforced. If `data` is a [`Buffer`][] then
|
||||||
`input_encoding` is ignored.
|
`input_encoding` is ignored.
|
||||||
|
|
||||||
@ -612,10 +613,10 @@ be used in one of two ways:
|
|||||||
|
|
||||||
- As a [stream][] that is both readable and writable, where data is written
|
- As a [stream][] that is both readable and writable, where data is written
|
||||||
to produce a computed HMAC digest on the readable side, or
|
to produce a computed HMAC digest on the readable side, or
|
||||||
- Using the `hmac.update()` and `hmac.final()` methods to produce the
|
- Using the [`hmac.update()`][] and [`hmac.digest()`][] methods to produce the
|
||||||
computed HMAC digest.
|
computed HMAC digest.
|
||||||
|
|
||||||
The `crypto.createHmac()` method is used to create `Hmac` instances. `Hmac`
|
The [`crypto.createHmac()`][] method is used to create `Hmac` instances. `Hmac`
|
||||||
objects are not to be created directly using the `new` keyword.
|
objects are not to be created directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Hmac` objects as streams:
|
Example: Using `Hmac` objects as streams:
|
||||||
@ -647,7 +648,7 @@ const input = fs.createReadStream('test.js');
|
|||||||
input.pipe(hmac).pipe(process.stdout);
|
input.pipe(hmac).pipe(process.stdout);
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `hmac.update()` and `hmac.digest()` methods:
|
Example: Using the [`hmac.update()`][] and [`hmac.digest()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -661,16 +662,16 @@ console.log(hmac.digest('hex'));
|
|||||||
|
|
||||||
### hmac.digest([encoding])
|
### hmac.digest([encoding])
|
||||||
|
|
||||||
Calculates the HMAC digest of all of the data passed using `hmac.update()`. The
|
Calculates the HMAC digest of all of the data passed using [`hmac.update()`][].
|
||||||
`encoding` can be `'hex'`, `'binary'` or `'base64'`. If `encoding` is provided
|
The `encoding` can be `'hex'`, `'binary'` or `'base64'`. If `encoding` is
|
||||||
a string is returned; otherwise a [`Buffer`][] is returned;
|
provided a string is returned; otherwise a [`Buffer`][] is returned;
|
||||||
|
|
||||||
The `Hmac` object can not be used again after `hmac.digest()` has been
|
The `Hmac` object can not be used again after `hmac.digest()` has been
|
||||||
called. Multiple calls to `hmac.digest()` will result in an error being thrown.
|
called. Multiple calls to `hmac.digest()` will result in an error being thrown.
|
||||||
|
|
||||||
### hmac.update(data)
|
### hmac.update(data)
|
||||||
|
|
||||||
Update the `Hmac` content with the given `data`. This can be called
|
Update the `Hmac` content with the given `data`. This can be called
|
||||||
many times with new data as it is streamed.
|
many times with new data as it is streamed.
|
||||||
|
|
||||||
## Class: Sign
|
## Class: Sign
|
||||||
@ -679,11 +680,11 @@ The `Sign` Class is a utility for generating signatures. It can be used in one
|
|||||||
of two ways:
|
of two ways:
|
||||||
|
|
||||||
- As a writable [stream][], where data to be signed is written and the
|
- As a writable [stream][], where data to be signed is written and the
|
||||||
`sign.sign()` method is used to generate and return the signature, or
|
[`sign.sign()`][] method is used to generate and return the signature, or
|
||||||
- Using the `sign.update()` and `sign.sign()` methods to produce the
|
- Using the [`sign.update()`][] and [`sign.sign()`][] methods to produce the
|
||||||
signature.
|
signature.
|
||||||
|
|
||||||
The `crypto.createSign()` method is used to create `Sign` instances. `Sign`
|
The [`crypto.createSign()`][] method is used to create `Sign` instances. `Sign`
|
||||||
objects are not to be created directly using the `new` keyword.
|
objects are not to be created directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Sign` objects as streams:
|
Example: Using `Sign` objects as streams:
|
||||||
@ -700,7 +701,7 @@ console.log(sign.sign(private_key, 'hex'));
|
|||||||
// Prints the calculated signature
|
// Prints the calculated signature
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `sign.update()` and `sign.sign()` methods:
|
Example: Using the [`sign.update()`][] and [`sign.sign()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -716,7 +717,7 @@ console.log(sign.sign(private_key, 'hex'));
|
|||||||
### sign.sign(private_key[, output_format])
|
### sign.sign(private_key[, output_format])
|
||||||
|
|
||||||
Calculates the signature on all the data passed through using either
|
Calculates the signature on all the data passed through using either
|
||||||
`sign.update()` or `sign.write()`.
|
[`sign.update()`][] or [`sign.write()`][stream-writable-write].
|
||||||
|
|
||||||
The `private_key` argument can be an object or a string. If `private_key` is a
|
The `private_key` argument can be an object or a string. If `private_key` is a
|
||||||
string, it is treated as a raw key with no passphrase. If `private_key` is an
|
string, it is treated as a raw key with no passphrase. If `private_key` is an
|
||||||
@ -734,7 +735,7 @@ called. Multiple calls to `sign.sign()` will result in an error being thrown.
|
|||||||
|
|
||||||
### sign.update(data)
|
### sign.update(data)
|
||||||
|
|
||||||
Updates the sign object with the given `data`. This can be called many times
|
Updates the sign object with the given `data`. This can be called many times
|
||||||
with new data as it is streamed.
|
with new data as it is streamed.
|
||||||
|
|
||||||
## Class: Verify
|
## Class: Verify
|
||||||
@ -744,11 +745,11 @@ of two ways:
|
|||||||
|
|
||||||
- As a writable [stream][] where written data is used to validate against the
|
- As a writable [stream][] where written data is used to validate against the
|
||||||
supplied signature, or
|
supplied signature, or
|
||||||
- Using the `verify.update()` and `verify.verify()` methods to verify the
|
- Using the [`verify.update()`][] and [`verify.verify()`][] methods to verify
|
||||||
signature.
|
the signature.
|
||||||
|
|
||||||
The `crypto.createSign()` method is used to create `Sign` instances. `Sign`
|
The [`crypto.createSign()`][] method is used to create `Sign` instances.
|
||||||
objects are not to be created directly using the `new` keyword.
|
`Sign` objects are not to be created directly using the `new` keyword.
|
||||||
|
|
||||||
Example: Using `Verify` objects as streams:
|
Example: Using `Verify` objects as streams:
|
||||||
|
|
||||||
@ -765,7 +766,7 @@ console.log(sign.verify(public_key, signature));
|
|||||||
// Prints true or false
|
// Prints true or false
|
||||||
```
|
```
|
||||||
|
|
||||||
Example: Using the `verify.update()` and `verify.verify()` methods:
|
Example: Using the [`verify.update()`][] and [`verify.verify()`][] methods:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -781,7 +782,7 @@ console.log(verify.verify(public_key, signature));
|
|||||||
|
|
||||||
### verifier.update(data)
|
### verifier.update(data)
|
||||||
|
|
||||||
Updates the verifier object with the given `data`. This can be called many
|
Updates the verifier object with the given `data`. This can be called many
|
||||||
times with new data as it is streamed.
|
times with new data as it is streamed.
|
||||||
|
|
||||||
### verifier.verify(object, signature[, signature_format])
|
### verifier.verify(object, signature[, signature_format])
|
||||||
@ -806,8 +807,8 @@ thrown.
|
|||||||
### crypto.DEFAULT_ENCODING
|
### crypto.DEFAULT_ENCODING
|
||||||
|
|
||||||
The default encoding to use for functions that can take either strings
|
The default encoding to use for functions that can take either strings
|
||||||
or [buffers][]. The default value is `'buffer'`, which makes methods default
|
or [buffers][`Buffer`]. The default value is `'buffer'`, which makes methods
|
||||||
to [`Buffer`][] objects.
|
default to [`Buffer`][] objects.
|
||||||
|
|
||||||
The `crypto.DEFAULT_ENCODING` mechanism is provided for backwards compatibility
|
The `crypto.DEFAULT_ENCODING` mechanism is provided for backwards compatibility
|
||||||
with legacy programs that expect `'binary'` to be the default encoding.
|
with legacy programs that expect `'binary'` to be the default encoding.
|
||||||
@ -825,7 +826,7 @@ currently in use. Setting to true requires a FIPS build of Node.js.
|
|||||||
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`.
|
||||||
|
|
||||||
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
||||||
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
||||||
available cipher algorithms.
|
available cipher algorithms.
|
||||||
|
|
||||||
@ -841,7 +842,7 @@ rapidly.
|
|||||||
|
|
||||||
In line with OpenSSL's recommendation to use pbkdf2 instead of
|
In line with OpenSSL's recommendation to use pbkdf2 instead of
|
||||||
[`EVP_BytesToKey`][] it is recommended that developers derive a key and IV on
|
[`EVP_BytesToKey`][] it is recommended that developers derive a key and IV on
|
||||||
their own using [`crypto.pbkdf2`][] and to use [`crypto.createCipheriv()`][]
|
their own using [`crypto.pbkdf2()`][] and to use [`crypto.createCipheriv()`][]
|
||||||
to create the `Cipher` object.
|
to create the `Cipher` object.
|
||||||
|
|
||||||
### crypto.createCipheriv(algorithm, key, iv)
|
### crypto.createCipheriv(algorithm, key, iv)
|
||||||
@ -849,13 +850,13 @@ to create the `Cipher` object.
|
|||||||
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`).
|
||||||
|
|
||||||
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
||||||
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
||||||
available cipher algorithms.
|
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 `'binary'` encoded strings or
|
[initialization vector][]. Both arguments must be `'binary'` encoded strings or
|
||||||
[buffers][].
|
[buffers][`Buffer`].
|
||||||
|
|
||||||
### crypto.createCredentials(details)
|
### crypto.createCredentials(details)
|
||||||
|
|
||||||
@ -896,7 +897,7 @@ rapidly.
|
|||||||
|
|
||||||
In line with OpenSSL's recommendation to use pbkdf2 instead of
|
In line with OpenSSL's recommendation to use pbkdf2 instead of
|
||||||
[`EVP_BytesToKey`][] it is recommended that developers derive a key and IV on
|
[`EVP_BytesToKey`][] it is recommended that developers derive a key and IV on
|
||||||
their own using [`crypto.pbkdf2`][] and to use [`crypto.createDecipheriv()`][]
|
their own using [`crypto.pbkdf2()`][] and to use [`crypto.createDecipheriv()`][]
|
||||||
to create the `Decipher` object.
|
to create the `Decipher` object.
|
||||||
|
|
||||||
### crypto.createDecipheriv(algorithm, key, iv)
|
### crypto.createDecipheriv(algorithm, key, iv)
|
||||||
@ -904,13 +905,13 @@ to create the `Decipher` object.
|
|||||||
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`).
|
||||||
|
|
||||||
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
|
||||||
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
recent OpenSSL releases, `openssl list-cipher-algorithms` will display the
|
||||||
available cipher algorithms.
|
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 `'binary'` encoded strings or
|
[initialization vector][]. Both arguments must be `'binary'` encoded strings or
|
||||||
[buffers][].
|
[buffers][`Buffer`].
|
||||||
|
|
||||||
### crypto.createDiffieHellman(prime[, prime_encoding][, generator][, generator_encoding])
|
### crypto.createDiffieHellman(prime[, prime_encoding][, generator][, generator_encoding])
|
||||||
|
|
||||||
@ -1040,7 +1041,7 @@ console.log(curves); // ['secp256k1', 'secp384r1', ...]
|
|||||||
|
|
||||||
### crypto.getDiffieHellman(group_name)
|
### crypto.getDiffieHellman(group_name)
|
||||||
|
|
||||||
Creates a predefined `DiffieHellman` key exchange object. The
|
Creates a predefined `DiffieHellman` key exchange object. The
|
||||||
supported groups are: `'modp1'`, `'modp2'`, `'modp5'` (defined in
|
supported groups are: `'modp1'`, `'modp2'`, `'modp5'` (defined in
|
||||||
[RFC 2412][], but see [Caveats][]) and `'modp14'`, `'modp15'`,
|
[RFC 2412][], but see [Caveats][]) and `'modp14'`, `'modp15'`,
|
||||||
`'modp16'`, `'modp17'`, `'modp18'` (defined in [RFC 3526][]). The
|
`'modp16'`, `'modp17'`, `'modp18'` (defined in [RFC 3526][]). The
|
||||||
@ -1082,7 +1083,7 @@ console.log(hashes); // ['sha', 'sha1', 'sha1WithRSAEncryption', ...]
|
|||||||
### crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)
|
### crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)
|
||||||
|
|
||||||
Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2)
|
Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2)
|
||||||
implementation. A selected HMAC digest algorithm specified by `digest` is
|
implementation. A selected HMAC digest algorithm specified by `digest` is
|
||||||
applied to derive a key of the requested byte length (`keylen`) from the
|
applied to derive a key of the requested byte length (`keylen`) from the
|
||||||
`password`, `salt` and `iterations`.
|
`password`, `salt` and `iterations`.
|
||||||
|
|
||||||
@ -1114,7 +1115,7 @@ An array of supported digest functions can be retrieved using
|
|||||||
### crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)
|
### crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)
|
||||||
|
|
||||||
Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2)
|
Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2)
|
||||||
implementation. A selected HMAC digest algorithm specified by `digest` is
|
implementation. A selected HMAC digest algorithm specified by `digest` is
|
||||||
applied to derive a key of the requested byte length (`keylen`) from the
|
applied to derive a key of the requested byte length (`keylen`) from the
|
||||||
`password`, `salt` and `iterations`.
|
`password`, `salt` and `iterations`.
|
||||||
|
|
||||||
@ -1284,26 +1285,26 @@ is a bit field taking one of or a mix of the following flags (defined in the
|
|||||||
The Crypto module was added to Node.js before there was the concept of a
|
The Crypto module was added to Node.js before there was the concept of a
|
||||||
unified Stream API, and before there were [`Buffer`][] objects for handling
|
unified Stream API, and before there were [`Buffer`][] objects for handling
|
||||||
binary data. As such, the many of the `crypto` defined classes have methods not
|
binary data. As such, the many of the `crypto` defined classes have methods not
|
||||||
typically found on other Node.js classes that implement the [streams][]
|
typically found on other Node.js classes that implement the [streams][stream]
|
||||||
API (e.g. `update()`, `final()`, or `digest()`). Also, many methods accepted
|
API (e.g. `update()`, `final()`, or `digest()`). Also, many methods accepted
|
||||||
and returned `'binary'` encoded strings by default rather than Buffers. This
|
and returned `'binary'` encoded strings by default rather than Buffers. This
|
||||||
default was changed after Node.js v0.8 to use [`Buffer`][] objects by default
|
default was changed after Node.js v0.8 to use [`Buffer`][] objects by default
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
### Recent ECDH Changes
|
### Recent ECDH Changes
|
||||||
|
|
||||||
Usage of `ECDH` with non-dynamically generated key pairs has been simplified.
|
Usage of `ECDH` with non-dynamically generated key pairs has been simplified.
|
||||||
Now, `ecdh.setPrivateKey()` can be called with a preselected private key and the
|
Now, [`ecdh.setPrivateKey()`][] can be called with a preselected private key
|
||||||
associated public point (key) will be computed and stored in the object.
|
and the associated public point (key) will be computed and stored in the object.
|
||||||
This allows code to only store and provide the private part of the EC key pair.
|
This allows code to only store and provide the private part of the EC key pair.
|
||||||
`ecdh.setPrivateKey()` now also validates that the private key is valid for the
|
[`ecdh.setPrivateKey()`][] now also validates that the private key is valid for
|
||||||
selected curve.
|
the selected curve.
|
||||||
|
|
||||||
The `ecdh.setPublicKey()` method is now deprecated as its inclusion in the API
|
The [`ecdh.setPublicKey()`][] method is now deprecated as its inclusion in the
|
||||||
is not useful. Either a previously stored private key should be set, which
|
API is not useful. Either a previously stored private key should be set, which
|
||||||
automatically generates the associated public key, or `ecdh.generateKeys()`
|
automatically generates the associated public key, or [`ecdh.generateKeys()`][]
|
||||||
should be called. The main drawback of using `ecdh.setPublicKey()` is that it
|
should be called. The main drawback of using [`ecdh.setPublicKey()`][] is that
|
||||||
can be used to put the ECDH key pair into an inconsistent state.
|
it can be used to put the ECDH key pair into an inconsistent state.
|
||||||
|
|
||||||
### Support for weak or compromised algorithms
|
### Support for weak or compromised algorithms
|
||||||
|
|
||||||
@ -1327,30 +1328,46 @@ Based on the recommendations of [NIST SP 800-131A][]:
|
|||||||
|
|
||||||
See the reference for other recommendations and details.
|
See the reference for other recommendations and details.
|
||||||
|
|
||||||
[HTML5's `keygen` element]: http://www.w3.org/TR/html5/forms.html#the-keygen-element
|
|
||||||
[OpenSSL's SPKAC implementation]: https://www.openssl.org/docs/apps/spkac.html
|
|
||||||
[`createCipher()`]: #crypto_crypto_createcipher_algorithm_password
|
|
||||||
[`createCipheriv()`]: #crypto_crypto_createcipheriv_algorithm_key_iv
|
|
||||||
[`createHash()`]: #crypto_crypto_createhash_algorithm
|
|
||||||
[`crypto.createDecipher`]: #crypto_crypto_createdecipher_algorithm_password
|
|
||||||
[`crypto.createDecipheriv`]: #crypto_crypto_createdecipheriv_algorithm_key_iv
|
|
||||||
[`crypto.createDiffieHellman()`]: #crypto_crypto_creatediffiehellman_prime_prime_encoding_generator_generator_encoding
|
|
||||||
[`crypto.getHashes()`]: #crypto_crypto_gethashes
|
|
||||||
[`crypto.pbkdf2`]: #crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback
|
|
||||||
[`decipher.update`]: #crypto_decipher_update_data_input_encoding_output_encoding
|
|
||||||
[`diffieHellman.setPublicKey()`]: #crypto_diffiehellman_setpublickey_public_key_encoding
|
|
||||||
[`EVP_BytesToKey`]: https://www.openssl.org/docs/crypto/EVP_BytesToKey.html
|
|
||||||
[`getCurves()`]: #crypto_crypto_getcurves
|
|
||||||
[`tls.createSecureContext()`]: tls.html#tls_tls_createsecurecontext_details
|
|
||||||
[`Buffer`]: buffer.html
|
[`Buffer`]: buffer.html
|
||||||
[buffers]: buffer.html
|
[`cipher.final()`]: #crypto_cipher_final_output_encoding
|
||||||
|
[`cipher.update()`]: #crypto_cipher_update_data_input_encoding_output_encoding
|
||||||
|
[`crypto.createCipher()`]: #crypto_crypto_createcipher_algorithm_password
|
||||||
|
[`crypto.createCipheriv()`]: #crypto_crypto_createcipheriv_algorithm_key_iv
|
||||||
|
[`crypto.createDecipher()`]: #crypto_crypto_createdecipher_algorithm_password
|
||||||
|
[`crypto.createDecipheriv()`]: #crypto_crypto_createdecipheriv_algorithm_key_iv
|
||||||
|
[`crypto.createDiffieHellman()`]: #crypto_crypto_creatediffiehellman_prime_prime_encoding_generator_generator_encoding
|
||||||
|
[`crypto.createECDH()`]: #crypto_crypto_createecdh_curve_name
|
||||||
|
[`crypto.createHash()`]: #crypto_crypto_createhash_algorithm
|
||||||
|
[`crypto.createHmac()`]: #crypto_crypto_createhmac_algorithm_key
|
||||||
|
[`crypto.createSign()`]: #crypto_crypto_createsign_algorithm
|
||||||
|
[`crypto.getCurves()`]: #crypto_crypto_getcurves
|
||||||
|
[`crypto.getHashes()`]: #crypto_crypto_gethashes
|
||||||
|
[`crypto.pbkdf2()`]: #crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback
|
||||||
|
[`decipher.final()`]: #crypto_decipher_final_output_encoding
|
||||||
|
[`decipher.update()`]: #crypto_decipher_update_data_input_encoding_output_encoding
|
||||||
|
[`diffieHellman.setPublicKey()`]: #crypto_diffiehellman_setpublickey_public_key_encoding
|
||||||
|
[`ecdh.generateKeys()`]: #crypto_ecdh_generatekeys_encoding_format
|
||||||
|
[`ecdh.setPrivateKey()`]: #crypto_ecdh_setprivatekey_private_key_encoding
|
||||||
|
[`ecdh.setPublicKey()`]: #crypto_ecdh_setpublickey_public_key_encoding
|
||||||
|
[`EVP_BytesToKey`]: https://www.openssl.org/docs/crypto/EVP_BytesToKey.html
|
||||||
|
[`hash.digest()`]: #crypto_hash_digest_encoding
|
||||||
|
[`hash.update()`]: #crypto_hash_update_data_input_encoding
|
||||||
|
[`hmac.digest()`]: #crypto_hmac_digest_encoding
|
||||||
|
[`hmac.update()`]: #crypto_hmac_update_data
|
||||||
|
[`sign.sign()`]: #crypto_sign_sign_private_key_output_format
|
||||||
|
[`sign.update()`]: #crypto_sign_update_data
|
||||||
|
[`tls.createSecureContext()`]: tls.html#tls_tls_createsecurecontext_details
|
||||||
|
[`verify.update()`]: #crypto_verifier_update_data
|
||||||
|
[`verify.verify()`]: #crypto_verifier_verify_object_signature_signature_format
|
||||||
[Caveats]: #crypto_support_for_weak_or_compromised_algorithms
|
[Caveats]: #crypto_support_for_weak_or_compromised_algorithms
|
||||||
|
[HTML5's `keygen` element]: http://www.w3.org/TR/html5/forms.html#the-keygen-element
|
||||||
[initialization vector]: https://en.wikipedia.org/wiki/Initialization_vector
|
[initialization vector]: https://en.wikipedia.org/wiki/Initialization_vector
|
||||||
[NIST SP 800-131A]: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar1.pdf
|
[NIST SP 800-131A]: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar1.pdf
|
||||||
[NIST SP 800-132]: http://csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf
|
[NIST SP 800-132]: http://csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf
|
||||||
|
[OpenSSL cipher list format]: https://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT
|
||||||
|
[OpenSSL's SPKAC implementation]: https://www.openssl.org/docs/apps/spkac.html
|
||||||
|
[publicly trusted list of CAs]: https://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt
|
||||||
[RFC 2412]: https://www.rfc-editor.org/rfc/rfc2412.txt
|
[RFC 2412]: https://www.rfc-editor.org/rfc/rfc2412.txt
|
||||||
[RFC 3526]: https://www.rfc-editor.org/rfc/rfc3526.txt
|
[RFC 3526]: https://www.rfc-editor.org/rfc/rfc3526.txt
|
||||||
[stream]: stream.html
|
[stream]: stream.html
|
||||||
[streams]: stream.html
|
[stream-writable-write]: stream.html#stream_writable_write_chunk_encoding_callback
|
||||||
[OpenSSL cipher list format]: https://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT
|
|
||||||
[publicly trusted list of CAs]: https://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user