| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 'use strict';var Buffer = require('safe-buffer').Buffer;var 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) {  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : 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) {  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);  return this;};Verify.prototype.verify = function verifyMethod(key, sig, enc) {  var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;  this.end();  var hash = this._hash.digest();  return verify(sigBuffer, 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};
 |