| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | 
							- 'use strict';
 
- var Buffer = require('safe-buffer').Buffer;
 
- var Transform = require('stream').Transform;
 
- var StringDecoder = require('string_decoder').StringDecoder;
 
- var inherits = require('inherits');
 
- var toBuffer = require('to-buffer');
 
- 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) {
 
- 	var bufferData = toBuffer(data, inputEnc); // asserts correct input type
 
- 	var outData = this._update(bufferData);
 
- 	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;
 
 
  |