Skip to content

Commit

Permalink
crypto: return this in setAuthTag/setAAD
Browse files Browse the repository at this point in the history
Allow method chaining as with setAutoPadding and other methods.

PR-URL: #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>
  • Loading branch information
fanatid authored and addaleax committed Nov 22, 2016
1 parent b070df8 commit 08a7e7b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
10 changes: 10 additions & 0 deletions doc/api/crypto.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -329,6 +333,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.

### decipher.setAuthTag(buffer)
<!-- YAML
added: v1.0.0
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions lib/crypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,12 @@ Cipher.prototype.getAuthTag = function getAuthTag() {

Cipher.prototype.setAuthTag = function setAuthTag(tagbuf) {
this._handle.setAuthTag(tagbuf);
return this;
};

Cipher.prototype.setAAD = function setAAD(aadbuf) {
this._handle.setAAD(aadbuf);
return this;
};

exports.createCipheriv = exports.Cipheriv = Cipheriv;
Expand Down
11 changes: 11 additions & 0 deletions test/parallel/test-crypto-cipher-decipher.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

0 comments on commit 08a7e7b

Please sign in to comment.