| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | var Buffer = require('safe-buffer').Buffervar createHash = require('create-hash')var stream = require('readable-stream')var inherits = require('inherits')var sign = require('./sign')var verify = require('./verify')var algorithms = require('./algorithms.json')Object.keys(algorithms).forEach(function (key) {  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')  algorithms[key.toLowerCase()] = algorithms[key]})function Sign (algorithm) {  stream.Writable.call(this)  var data = algorithms[algorithm]  if (!data) throw new Error('Unknown message digest')  this._hashType = data.hash  this._hash = createHash(data.hash)  this._tag = data.id  this._signType = data.sign}inherits(Sign, stream.Writable)Sign.prototype._write = function _write (data, _, done) {  this._hash.update(data)  done()}Sign.prototype.update = function update (data, enc) {  if (typeof data === 'string') data = Buffer.from(data, enc)  this._hash.update(data)  return this}Sign.prototype.sign = function signMethod (key, enc) {  this.end()  var hash = this._hash.digest()  var sig = sign(hash, key, this._hashType, this._signType, this._tag)  return enc ? sig.toString(enc) : sig}function Verify (algorithm) {  stream.Writable.call(this)  var data = algorithms[algorithm]  if (!data) throw new Error('Unknown message digest')  this._hash = createHash(data.hash)  this._tag = data.id  this._signType = data.sign}inherits(Verify, stream.Writable)Verify.prototype._write = function _write (data, _, done) {  this._hash.update(data)  done()}Verify.prototype.update = function update (data, enc) {  if (typeof data === 'string') data = Buffer.from(data, enc)  this._hash.update(data)  return this}Verify.prototype.verify = function verifyMethod (key, sig, enc) {  if (typeof sig === 'string') sig = Buffer.from(sig, enc)  this.end()  var hash = this._hash.digest()  return verify(sig, hash, key, this._signType, this._tag)}function createSign (algorithm) {  return new Sign(algorithm)}function createVerify (algorithm) {  return new Verify(algorithm)}module.exports = {  Sign: createSign,  Verify: createVerify,  createSign: createSign,  createVerify: createVerify}
 |