2015-11-09 06:00:56 +01:00
|
|
|
'use strict';
|
|
|
|
var common = require('../common');
|
|
|
|
var assert = require('assert');
|
|
|
|
|
|
|
|
if (!common.hasCrypto) {
|
2016-05-11 21:34:52 +02:00
|
|
|
common.skip('missing crypto');
|
2015-11-09 06:00:56 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
var crypto = require('crypto');
|
|
|
|
|
|
|
|
function testCipher1(key, iv) {
|
|
|
|
// Test encyrption and decryption with explicit key and iv
|
|
|
|
var plaintext =
|
|
|
|
'32|RmVZZkFUVmpRRkp0TmJaUm56ZU9qcnJkaXNNWVNpTTU*|iXmckfRWZBGWWELw' +
|
|
|
|
'eCBsThSsfUHLeRe0KCsK8ooHgxie0zOINpXxfZi/oNG7uq9JWFVCk70gfzQH8ZUJ' +
|
|
|
|
'jAfaFg**';
|
|
|
|
var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv);
|
|
|
|
var ciph = cipher.update(plaintext, 'utf8', 'hex');
|
|
|
|
ciph += cipher.final('hex');
|
|
|
|
|
|
|
|
var decipher = crypto.createDecipheriv('des-ede3-cbc', key, iv);
|
|
|
|
var txt = decipher.update(ciph, 'hex', 'utf8');
|
|
|
|
txt += decipher.final('utf8');
|
|
|
|
|
|
|
|
assert.equal(txt, plaintext, 'encryption and decryption with key and iv');
|
|
|
|
|
|
|
|
// streaming cipher interface
|
|
|
|
// NB: In real life, it's not guaranteed that you can get all of it
|
|
|
|
// in a single read() like this. But in this case, we know it's
|
|
|
|
// quite small, so there's no harm.
|
|
|
|
var cStream = crypto.createCipheriv('des-ede3-cbc', key, iv);
|
|
|
|
cStream.end(plaintext);
|
|
|
|
ciph = cStream.read();
|
|
|
|
|
|
|
|
var dStream = crypto.createDecipheriv('des-ede3-cbc', key, iv);
|
|
|
|
dStream.end(ciph);
|
|
|
|
txt = dStream.read().toString('utf8');
|
|
|
|
|
|
|
|
assert.equal(txt, plaintext, 'streaming cipher iv');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function testCipher2(key, iv) {
|
|
|
|
// Test encyrption and decryption with explicit key and iv
|
|
|
|
var plaintext =
|
|
|
|
'32|RmVZZkFUVmpRRkp0TmJaUm56ZU9qcnJkaXNNWVNpTTU*|iXmckfRWZBGWWELw' +
|
|
|
|
'eCBsThSsfUHLeRe0KCsK8ooHgxie0zOINpXxfZi/oNG7uq9JWFVCk70gfzQH8ZUJ' +
|
|
|
|
'jAfaFg**';
|
|
|
|
var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv);
|
|
|
|
var ciph = cipher.update(plaintext, 'utf8', 'buffer');
|
|
|
|
ciph = Buffer.concat([ciph, cipher.final('buffer')]);
|
|
|
|
|
|
|
|
var decipher = crypto.createDecipheriv('des-ede3-cbc', key, iv);
|
|
|
|
var txt = decipher.update(ciph, 'buffer', 'utf8');
|
|
|
|
txt += decipher.final('utf8');
|
|
|
|
|
|
|
|
assert.equal(txt, plaintext, 'encryption and decryption with key and iv');
|
|
|
|
}
|
|
|
|
|
|
|
|
testCipher1('0123456789abcd0123456789', '12345678');
|
2016-01-26 00:00:06 +01:00
|
|
|
testCipher1('0123456789abcd0123456789', Buffer.from('12345678'));
|
|
|
|
testCipher1(Buffer.from('0123456789abcd0123456789'), '12345678');
|
|
|
|
testCipher1(Buffer.from('0123456789abcd0123456789'), Buffer.from('12345678'));
|
2015-11-09 06:00:56 +01:00
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
testCipher2(Buffer.from('0123456789abcd0123456789'), Buffer.from('12345678'));
|