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