|  | var Buffer = require('safe-buffer').Buffer | 
|  | var CipherBase = require('./') | 
|  |  | 
|  | var test = require('tape') | 
|  | var inherits = require('inherits') | 
|  |  | 
|  | test('basic version', function (t) { | 
|  | function Cipher () { | 
|  | CipherBase.call(this) | 
|  | } | 
|  | inherits(Cipher, CipherBase) | 
|  | Cipher.prototype._update = function (input) { | 
|  | t.ok(Buffer.isBuffer(input)) | 
|  | return input | 
|  | } | 
|  | Cipher.prototype._final = function () { | 
|  | // noop | 
|  | } | 
|  | var cipher = new Cipher() | 
|  | var utf8 = 'abc123abcd' | 
|  | var update = cipher.update(utf8, 'utf8', 'base64') + cipher.final('base64') | 
|  | var string = (Buffer.from(update, 'base64')).toString() | 
|  | t.equals(utf8, string) | 
|  | t.end() | 
|  | }) | 
|  | test('hash mode', function (t) { | 
|  | function Cipher () { | 
|  | CipherBase.call(this, 'finalName') | 
|  | this._cache = [] | 
|  | } | 
|  | inherits(Cipher, CipherBase) | 
|  | Cipher.prototype._update = function (input) { | 
|  | t.ok(Buffer.isBuffer(input)) | 
|  | this._cache.push(input) | 
|  | } | 
|  | Cipher.prototype._final = function () { | 
|  | return Buffer.concat(this._cache) | 
|  | } | 
|  | var cipher = new Cipher() | 
|  | var utf8 = 'abc123abcd' | 
|  | var update = cipher.update(utf8, 'utf8').finalName('base64') | 
|  | var string = (Buffer.from(update, 'base64')).toString() | 
|  |  | 
|  | t.equals(utf8, string) | 
|  | t.end() | 
|  | }) | 
|  | test('hash mode as stream', function (t) { | 
|  | function Cipher () { | 
|  | CipherBase.call(this, 'finalName') | 
|  | this._cache = [] | 
|  | } | 
|  | inherits(Cipher, CipherBase) | 
|  | Cipher.prototype._update = function (input) { | 
|  | t.ok(Buffer.isBuffer(input)) | 
|  | this._cache.push(input) | 
|  | } | 
|  | Cipher.prototype._final = function () { | 
|  | return Buffer.concat(this._cache) | 
|  | } | 
|  | var cipher = new Cipher() | 
|  | cipher.on('error', function (e) { | 
|  | t.notOk(e) | 
|  | }) | 
|  | var utf8 = 'abc123abcd' | 
|  | cipher.end(utf8, 'utf8') | 
|  | var update = cipher.read().toString('base64') | 
|  | var string = (Buffer.from(update, 'base64')).toString() | 
|  |  | 
|  | t.equals(utf8, string) | 
|  | t.end() | 
|  | }) | 
|  |  | 
|  | test('encodings', function (t) { | 
|  | inherits(Cipher, CipherBase) | 
|  | function Cipher () { | 
|  | CipherBase.call(this) | 
|  | } | 
|  | Cipher.prototype._update = function (input) { | 
|  | return input | 
|  | } | 
|  | Cipher.prototype._final = function () { | 
|  | // noop | 
|  | } | 
|  | t.test('mix and match encoding', function (t) { | 
|  | t.plan(2) | 
|  |  | 
|  | var cipher = new Cipher() | 
|  | cipher.update('foo', 'utf8', 'utf8') | 
|  | t.throws(function () { | 
|  | cipher.update('foo', 'utf8', 'base64') | 
|  | }) | 
|  | cipher = new Cipher() | 
|  | cipher.update('foo', 'utf8', 'base64') | 
|  | t.doesNotThrow(function () { | 
|  | cipher.update('foo', 'utf8') | 
|  | cipher.final('base64') | 
|  | }) | 
|  | }) | 
|  | t.test('handle long uft8 plaintexts', function (t) { | 
|  | t.plan(1) | 
|  | var txt = 'ふっかつ あきる すぶり はやい つける まゆげ たんさん みんぞく ねほりはほり せまい たいまつばな ひはん' | 
|  |  | 
|  | var cipher = new Cipher() | 
|  | var decipher = new Cipher() | 
|  | var enc = decipher.update(cipher.update(txt, 'utf8', 'base64'), 'base64', 'utf8') | 
|  | enc += decipher.update(cipher.final('base64'), 'base64', 'utf8') | 
|  | enc += decipher.final('utf8') | 
|  |  | 
|  | t.equals(txt, enc) | 
|  | }) | 
|  | }) |