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