| '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); | 
|       }); | 
|     }); | 
|   }); | 
| }); |