| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | 
							- 'use strict';
 
- var assert = require('minimalistic-assert');
 
- var inherits = require('inherits');
 
- var proto = {};
 
- function CBCState(iv) {
 
-   assert.equal(iv.length, 8, 'Invalid IV length');
 
-   this.iv = new Array(8);
 
-   for (var i = 0; i < this.iv.length; i++)
 
-     this.iv[i] = iv[i];
 
- }
 
- function instantiate(Base) {
 
-   function CBC(options) {
 
-     Base.call(this, options);
 
-     this._cbcInit();
 
-   }
 
-   inherits(CBC, Base);
 
-   var keys = Object.keys(proto);
 
-   for (var i = 0; i < keys.length; i++) {
 
-     var key = keys[i];
 
-     CBC.prototype[key] = proto[key];
 
-   }
 
-   CBC.create = function create(options) {
 
-     return new CBC(options);
 
-   };
 
-   return CBC;
 
- }
 
- exports.instantiate = instantiate;
 
- proto._cbcInit = function _cbcInit() {
 
-   var state = new CBCState(this.options.iv);
 
-   this._cbcState = state;
 
- };
 
- proto._update = function _update(inp, inOff, out, outOff) {
 
-   var state = this._cbcState;
 
-   var superProto = this.constructor.super_.prototype;
 
-   var iv = state.iv;
 
-   if (this.type === 'encrypt') {
 
-     for (var i = 0; i < this.blockSize; i++)
 
-       iv[i] ^= inp[inOff + i];
 
-     superProto._update.call(this, iv, 0, out, outOff);
 
-     for (var i = 0; i < this.blockSize; i++)
 
-       iv[i] = out[outOff + i];
 
-   } else {
 
-     superProto._update.call(this, inp, inOff, out, outOff);
 
-     for (var i = 0; i < this.blockSize; i++)
 
-       out[outOff + i] ^= iv[i];
 
-     for (var i = 0; i < this.blockSize; i++)
 
-       iv[i] = inp[inOff + i];
 
-   }
 
- };
 
 
  |