| 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;
 |