| 'use strict'; |
| |
| var assert = require('assert'); |
| var crypto = require('crypto'); |
| var Buffer = require('buffer').Buffer; |
| |
| var des = require('../'); |
| |
| var fixtures = require('./fixtures'); |
| var bin = fixtures.bin; |
| |
| describe('DES-EDE-CBC', function() { |
| var CBC = des.CBC.instantiate(des.EDE); |
| |
| describe('encryption/decryption', function() { |
| var vectors = [ |
| { |
| key: new Array(4).join('133457799bbcdff1'), |
| iv: '0102030405060708', |
| input: '0123456789abcdef' |
| }, |
| { |
| key: new Array(4).join('0000000000000000'), |
| iv: 'ffffffffffffffff', |
| input: '0000000000000000' |
| }, |
| { |
| key: new Array(4).join('a3a3a3a3b3b3b3b3'), |
| iv: 'cdcdcdcdcdcdcdcd', |
| input: 'cccccccccccccccc' |
| }, |
| { |
| key: new Array(4).join('deadbeefabbadead'), |
| iv: 'a0da0da0da0da0da', |
| input: '0102030405060708090a' |
| }, |
| { |
| key: 'aabbccddeeff0011' + '1111222233334444' + 'ffffeeeeddddcccc', |
| iv: 'fefefefefefefefe', |
| input: '0102030405060708090a0102030405060708090a0102030405060708090a' + |
| '0102030405060708090a0102030405060607080a0102030405060708090a' |
| } |
| ]; |
| |
| vectors.forEach(function(vec, i) { |
| it('should encrypt vector ' + i, function() { |
| var key = new Buffer(vec.key, 'hex'); |
| var iv = new Buffer(vec.iv, 'hex'); |
| var input = new Buffer(vec.input, 'hex'); |
| |
| var enc = CBC.create({ |
| type: 'encrypt', |
| key: key, |
| iv: iv |
| }); |
| var out = new Buffer(enc.update(input).concat(enc.final())); |
| |
| var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv); |
| var expected = Buffer.concat([ cipher.update(input), cipher.final() ]); |
| |
| assert.deepEqual(out, expected); |
| |
| var dec = CBC.create({ |
| type: 'decrypt', |
| key: key, |
| iv: iv |
| }); |
| assert.deepEqual(new Buffer(dec.update(out).concat(dec.final())), |
| input); |
| }); |
| }); |
| }); |
| }); |