You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							1.9 KiB
						
					
					
				'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); | 
						|
      }); | 
						|
    }); | 
						|
  }); | 
						|
});
 | 
						|
 |