| '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-CBC', function() { | 
 |   var CBC = des.CBC.instantiate(des.DES); | 
 |  | 
 |   describe('encryption/decryption', function() { | 
 |     var vectors = [ | 
 |       { | 
 |         key: '133457799bbcdff1', | 
 |         iv: '0102030405060708', | 
 |         input: '0123456789abcdef' | 
 |       }, | 
 |       { | 
 |         key: '0000000000000000', | 
 |         iv: 'ffffffffffffffff', | 
 |         input: '0000000000000000' | 
 |       }, | 
 |       { | 
 |         key: 'a3a3a3a3b3b3b3b3', | 
 |         iv: 'cdcdcdcdcdcdcdcd', | 
 |         input: 'cccccccccccccccc' | 
 |       }, | 
 |       { | 
 |         key: 'deadbeefabbadead', | 
 |         iv: 'a0da0da0da0da0da', | 
 |         input: '0102030405060708090a' | 
 |       }, | 
 |       { | 
 |         key: 'aabbccddeeff0011', | 
 |         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-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); | 
 |       }); | 
 |     }); | 
 |   }); | 
 | }); |