summaryrefslogtreecommitdiff
path: root/test/parallel/test-crypto-cipheriv-decipheriv.js
diff options
context:
space:
mode:
authorShigeki Ohtsu <ohtsu@ohtsu.org>2017-08-25 01:42:55 +0900
committerShigeki Ohtsu <ohtsu@ohtsu.org>2017-08-30 01:20:10 +0900
commit4218f1974d3945cd4d675b5bc5292d88b993f9b8 (patch)
tree6b23a2e3b27a621f06563e36d23a76a420778551 /test/parallel/test-crypto-cipheriv-decipheriv.js
parentf3eb193a3019d79a82cec8b561e028e4e37a7b87 (diff)
downloadandroid-node-v8-4218f1974d3945cd4d675b5bc5292d88b993f9b8.tar.gz
android-node-v8-4218f1974d3945cd4d675b5bc5292d88b993f9b8.tar.bz2
android-node-v8-4218f1974d3945cd4d675b5bc5292d88b993f9b8.zip
crypto: fix error of createCipher in wrap mode
EVP_CIPHER_CTX_FLAG_WRAP_ALLOW flag needs to be set in using wrap mode ciphers. In `crypto.createCipher()`, AES key wrap mode does not use a default IV defined in RFC3394 but a generated IV with `EVP_BytesToKey()` to be consistent API behaviors with other ciphers. The built-in AES wrap mode in OpenSSL is not supported in FIPS mode as http://openssl.6102.n7.nabble.com/AES-Key-Wrap-in-FIPS-Mode-td50238.html so its tests in FIPS mode are skipped. Fixes: https://github.com/nodejs/node/issues/15009 PR-URL: https://github.com/nodejs/node/pull/15037 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/parallel/test-crypto-cipheriv-decipheriv.js')
-rw-r--r--test/parallel/test-crypto-cipheriv-decipheriv.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/parallel/test-crypto-cipheriv-decipheriv.js b/test/parallel/test-crypto-cipheriv-decipheriv.js
index 1ccfe8b3b8..8a5a05b82f 100644
--- a/test/parallel/test-crypto-cipheriv-decipheriv.js
+++ b/test/parallel/test-crypto-cipheriv-decipheriv.js
@@ -55,12 +55,36 @@ function testCipher2(key, iv) {
assert.strictEqual(txt, plaintext, 'encryption/decryption with key and iv');
}
+
+function testCipher3(key, iv) {
+ // Test encryption and decryption with explicit key and iv.
+ // AES Key Wrap test vector comes from RFC3394
+ const plaintext = Buffer.from('00112233445566778899AABBCCDDEEFF', 'hex');
+
+ const cipher = crypto.createCipheriv('id-aes128-wrap', key, iv);
+ let ciph = cipher.update(plaintext, 'utf8', 'buffer');
+ ciph = Buffer.concat([ciph, cipher.final('buffer')]);
+ const ciph2 = Buffer.from('1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5',
+ 'hex');
+ assert(ciph.equals(ciph2));
+ const decipher = crypto.createDecipheriv('id-aes128-wrap', key, iv);
+ let deciph = decipher.update(ciph, 'buffer');
+ deciph = Buffer.concat([deciph, decipher.final()]);
+
+ assert(deciph.equals(plaintext), 'encryption/decryption with key and iv');
+}
+
testCipher1('0123456789abcd0123456789', '12345678');
testCipher1('0123456789abcd0123456789', Buffer.from('12345678'));
testCipher1(Buffer.from('0123456789abcd0123456789'), '12345678');
testCipher1(Buffer.from('0123456789abcd0123456789'), Buffer.from('12345678'));
testCipher2(Buffer.from('0123456789abcd0123456789'), Buffer.from('12345678'));
+if (!common.hasFipsCrypto) {
+ testCipher3(Buffer.from('000102030405060708090A0B0C0D0E0F', 'hex'),
+ Buffer.from('A6A6A6A6A6A6A6A6', 'hex'));
+}
+
// Zero-sized IV should be accepted in ECB mode.
crypto.createCipheriv('aes-128-ecb', Buffer.alloc(16), Buffer.alloc(0));