2017-05-24 15:10:37 +02:00
# hash-base
[](https://www.npmjs.org/package/hash-base)
[](https://travis-ci.org/crypto-browserify/hash-base)
[](https://david-dm.org/crypto-browserify/hash-base#info=dependencies)
[](https://github.com/feross/standard)
Abstract base class to inherit from if you want to create streams implementing the same API as node crypto [Hash][1] (for [Cipher][2] / [Decipher][3] check [crypto-browserify/cipher-base][4]).
## Example
```js
2018-09-20 02:56:13 +02:00
const HashBase = require('hash-base')
const inherits = require('inherits')
// our hash function is XOR sum of all bytes
2017-05-24 15:10:37 +02:00
function MyHash () {
2018-09-20 02:56:13 +02:00
HashBase.call(this, 1) // in bytes
this._sum = 0x00
2017-05-24 15:10:37 +02:00
}
2018-09-20 02:56:13 +02:00
inherits(MyHash, HashBase)
2017-05-24 15:10:37 +02:00
MyHash.prototype._update = function () {
2018-09-20 02:56:13 +02:00
for (let i = 0; i < this._block.length ; + + i ) this . _sum ^ = this . _block [ i ]
2017-05-24 15:10:37 +02:00
}
MyHash.prototype._digest = function () {
2018-09-20 02:56:13 +02:00
return this._sum
2017-05-24 15:10:37 +02:00
}
2018-09-20 02:56:13 +02:00
const data = Buffer.from([ 0x00, 0x42, 0x01 ])
const hash = new MyHash().update(data).digest()
console.log(hash) // => 67
2017-05-24 15:10:37 +02:00
```
You also can check [source code ](index.js ) or [crypto-browserify/md5.js][5]
## LICENSE
MIT
[1]: https://nodejs.org/api/crypto.html#crypto_class_hash
[2]: https://nodejs.org/api/crypto.html#crypto_class_cipher
[3]: https://nodejs.org/api/crypto.html#crypto_class_decipher
[4]: https://github.com/crypto-browserify/cipher-base
[5]: https://github.com/crypto-browserify/md5.js