2017-05-24 15:10:37 +02:00
|
|
|
'use strict'
|
2017-05-03 15:35:00 +02:00
|
|
|
var inherits = require('inherits')
|
|
|
|
var md5 = require('./md5')
|
2017-05-24 15:10:37 +02:00
|
|
|
var RIPEMD160 = require('ripemd160')
|
2017-05-03 15:35:00 +02:00
|
|
|
var sha = require('sha.js')
|
|
|
|
|
|
|
|
var Base = require('cipher-base')
|
|
|
|
|
2017-05-24 15:10:37 +02:00
|
|
|
function HashNoConstructor (hash) {
|
2017-05-03 15:35:00 +02:00
|
|
|
Base.call(this, 'digest')
|
|
|
|
|
|
|
|
this._hash = hash
|
|
|
|
this.buffers = []
|
|
|
|
}
|
|
|
|
|
|
|
|
inherits(HashNoConstructor, Base)
|
|
|
|
|
|
|
|
HashNoConstructor.prototype._update = function (data) {
|
|
|
|
this.buffers.push(data)
|
|
|
|
}
|
|
|
|
|
|
|
|
HashNoConstructor.prototype._final = function () {
|
|
|
|
var buf = Buffer.concat(this.buffers)
|
|
|
|
var r = this._hash(buf)
|
|
|
|
this.buffers = null
|
|
|
|
|
|
|
|
return r
|
|
|
|
}
|
|
|
|
|
2017-05-24 15:10:37 +02:00
|
|
|
function Hash (hash) {
|
2017-05-03 15:35:00 +02:00
|
|
|
Base.call(this, 'digest')
|
|
|
|
|
|
|
|
this._hash = hash
|
|
|
|
}
|
|
|
|
|
|
|
|
inherits(Hash, Base)
|
|
|
|
|
|
|
|
Hash.prototype._update = function (data) {
|
|
|
|
this._hash.update(data)
|
|
|
|
}
|
|
|
|
|
|
|
|
Hash.prototype._final = function () {
|
|
|
|
return this._hash.digest()
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = function createHash (alg) {
|
|
|
|
alg = alg.toLowerCase()
|
2017-05-24 15:10:37 +02:00
|
|
|
if (alg === 'md5') return new HashNoConstructor(md5)
|
|
|
|
if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
|
2017-05-03 15:35:00 +02:00
|
|
|
|
|
|
|
return new Hash(sha(alg))
|
|
|
|
}
|