74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'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);
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |