Browse Source

crypto: return `this` in setAuthTag/setAAD

Allow method chaining as with setAutoPadding and other methods.

PR-URL: https://github.com/nodejs/node/pull/9398
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Sam Roberts <sam@strongloop.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
v6.x
Kirill Fomichev 8 years ago
committed by Myles Borins
parent
commit
875674bb1c
No known key found for this signature in database GPG Key ID: 933B01F40B5CA946
  1. 10
      doc/api/crypto.md
  2. 2
      lib/crypto.js
  3. 11
      test/parallel/test-crypto-cipher-decipher.js

10
doc/api/crypto.md

@ -194,6 +194,8 @@ When using an authenticated encryption mode (only `GCM` is currently
supported), the `cipher.setAAD()` method sets the value used for the
_additional authenticated data_ (AAD) input parameter.
Returns `this` for method chaining.
### cipher.getAuthTag()
<!-- YAML
added: v1.0.0
@ -222,6 +224,8 @@ using `0x0` instead of PKCS padding.
The `cipher.setAutoPadding()` method must be called before [`cipher.final()`][].
Returns `this` for method chaining.
### cipher.update(data[, input_encoding][, output_encoding])
<!-- YAML
added: v0.1.94
@ -329,6 +333,8 @@ When using an authenticated encryption mode (only `GCM` is currently
supported), the `decipher.setAAD()` method sets the value used for the
_additional authenticated data_ (AAD) input parameter.
Returns `this` for method chaining.
### decipher.setAuthTag(buffer)
<!-- YAML
added: v1.0.0
@ -340,6 +346,8 @@ received _authentication tag_. If no tag is provided, or if the cipher text
has been tampered with, [`decipher.final()`][] with throw, indicating that the
cipher text should be discarded due to failed authentication.
Returns `this` for method chaining.
### decipher.setAutoPadding(auto_padding=true)
<!-- YAML
added: v0.7.1
@ -355,6 +363,8 @@ multiple of the ciphers block size.
The `decipher.setAutoPadding()` method must be called before
[`decipher.update()`][].
Returns `this` for method chaining.
### decipher.update(data[, input_encoding][, output_encoding])
<!-- YAML
added: v0.1.94

2
lib/crypto.js

@ -178,10 +178,12 @@ Cipher.prototype.getAuthTag = function() {
Cipher.prototype.setAuthTag = function(tagbuf) {
this._handle.setAuthTag(tagbuf);
return this;
};
Cipher.prototype.setAAD = function(aadbuf) {
this._handle.setAAD(aadbuf);
return this;
};
exports.createCipheriv = exports.Cipheriv = Cipheriv;

11
test/parallel/test-crypto-cipher-decipher.js

@ -139,3 +139,14 @@ testCipher2(Buffer.from('0123456789abcdef'));
assert.doesNotThrow(() => txt += decipher.final('utf-16le'));
assert.strictEqual(txt, plaintext, 'decrypted result in utf-16le');
}
// setAutoPadding/setAuthTag/setAAD should return `this`
{
const key = '0123456789';
const tagbuf = Buffer.from('tagbuf');
const aadbuf = Buffer.from('aadbuf');
const decipher = crypto.createDecipher('aes-256-gcm', key);
assert.strictEqual(decipher.setAutoPadding(), decipher);
assert.strictEqual(decipher.setAuthTag(tagbuf), decipher);
assert.strictEqual(decipher.setAAD(aadbuf), decipher);
}

Loading…
Cancel
Save