| 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) | |
| }) | |
| }) |