Sha256: 495d0393a1ea82e22adc66e86b41711709bb5a3fb478edadfbc226d09a34b013

Contents?: true

Size: 1.41 KB

Versions: 43

Compression:

Stored size: 1.41 KB

Contents

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

Version data entries

43 entries across 42 versions & 15 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.18.0 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.18.2 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.16.1 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.15.2 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.18.4 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.18.1 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.14.0 test/dummy/node_modules/des.js/lib/des/cbc.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/des.js/lib/des/cbc.js
tang-0.2.1 spec/tang_app/node_modules/des.js/lib/des/cbc.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/des.js/lib/des/cbc.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/des.js/lib/des/cbc.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/des.js/lib/des/cbc.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/des.js/lib/des/cbc.js
tang-0.2.0 spec/tang_app/node_modules/des.js/lib/des/cbc.js
tang-0.1.0 spec/tang_app/node_modules/des.js/lib/des/cbc.js
tang-0.0.9 spec/tang_app/node_modules/des.js/lib/des/cbc.js
enju_library-0.3.8 spec/dummy/node_modules/des.js/lib/des/cbc.js
ilog-0.4.1 node_modules/des.js/lib/des/cbc.js