保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'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];
  }
};