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.
		
		
		
		
		
			
		
			
				
					
					
						
							99 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							99 lines
						
					
					
						
							2.2 KiB
						
					
					
				var Buffer = require('safe-buffer').Buffer | 
						|
var Transform = require('stream').Transform | 
						|
var StringDecoder = require('string_decoder').StringDecoder | 
						|
var inherits = require('inherits') | 
						|
 | 
						|
function CipherBase (hashMode) { | 
						|
  Transform.call(this) | 
						|
  this.hashMode = typeof hashMode === 'string' | 
						|
  if (this.hashMode) { | 
						|
    this[hashMode] = this._finalOrDigest | 
						|
  } else { | 
						|
    this.final = this._finalOrDigest | 
						|
  } | 
						|
  if (this._final) { | 
						|
    this.__final = this._final | 
						|
    this._final = null | 
						|
  } | 
						|
  this._decoder = null | 
						|
  this._encoding = null | 
						|
} | 
						|
inherits(CipherBase, Transform) | 
						|
 | 
						|
CipherBase.prototype.update = function (data, inputEnc, outputEnc) { | 
						|
  if (typeof data === 'string') { | 
						|
    data = Buffer.from(data, inputEnc) | 
						|
  } | 
						|
 | 
						|
  var outData = this._update(data) | 
						|
  if (this.hashMode) return this | 
						|
 | 
						|
  if (outputEnc) { | 
						|
    outData = this._toString(outData, outputEnc) | 
						|
  } | 
						|
 | 
						|
  return outData | 
						|
} | 
						|
 | 
						|
CipherBase.prototype.setAutoPadding = function () {} | 
						|
CipherBase.prototype.getAuthTag = function () { | 
						|
  throw new Error('trying to get auth tag in unsupported state') | 
						|
} | 
						|
 | 
						|
CipherBase.prototype.setAuthTag = function () { | 
						|
  throw new Error('trying to set auth tag in unsupported state') | 
						|
} | 
						|
 | 
						|
CipherBase.prototype.setAAD = function () { | 
						|
  throw new Error('trying to set aad in unsupported state') | 
						|
} | 
						|
 | 
						|
CipherBase.prototype._transform = function (data, _, next) { | 
						|
  var err | 
						|
  try { | 
						|
    if (this.hashMode) { | 
						|
      this._update(data) | 
						|
    } else { | 
						|
      this.push(this._update(data)) | 
						|
    } | 
						|
  } catch (e) { | 
						|
    err = e | 
						|
  } finally { | 
						|
    next(err) | 
						|
  } | 
						|
} | 
						|
CipherBase.prototype._flush = function (done) { | 
						|
  var err | 
						|
  try { | 
						|
    this.push(this.__final()) | 
						|
  } catch (e) { | 
						|
    err = e | 
						|
  } | 
						|
 | 
						|
  done(err) | 
						|
} | 
						|
CipherBase.prototype._finalOrDigest = function (outputEnc) { | 
						|
  var outData = this.__final() || Buffer.alloc(0) | 
						|
  if (outputEnc) { | 
						|
    outData = this._toString(outData, outputEnc, true) | 
						|
  } | 
						|
  return outData | 
						|
} | 
						|
 | 
						|
CipherBase.prototype._toString = function (value, enc, fin) { | 
						|
  if (!this._decoder) { | 
						|
    this._decoder = new StringDecoder(enc) | 
						|
    this._encoding = enc | 
						|
  } | 
						|
 | 
						|
  if (this._encoding !== enc) throw new Error('can\'t switch encodings') | 
						|
 | 
						|
  var out = this._decoder.write(value) | 
						|
  if (fin) { | 
						|
    out += this._decoder.end() | 
						|
  } | 
						|
 | 
						|
  return out | 
						|
} | 
						|
 | 
						|
module.exports = CipherBase
 | 
						|
 |