1# sha
2
3Check and get file hashes (using any algorithm)
4
5[![Build Status](https://img.shields.io/travis/ForbesLindesay/sha/master.svg)](https://travis-ci.org/ForbesLindesay/sha)
6[![Dependency Status](https://img.shields.io/david/ForbesLindesay/sha.svg)](https://david-dm.org/ForbesLindesay/sha)
7[![NPM version](https://img.shields.io/npm/v/sha.svg)](https://www.npmjs.com/package/sha)
8
9## Installation
10
11    $ npm install sha
12
13## API
14
15### check(fileName, expected, [options,] cb) / checkSync(filename, expected, [options])
16
17Asynchronously check that `fileName` has a "hash" of `expected`.  The callback will be called with either `null` or an error (indicating that they did not match).
18
19Options:
20
21- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
22
23### get(fileName, [options,] cb) / getSync(filename, [options])
24
25Asynchronously get the "hash" of `fileName`.  The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.
26
27Options:
28
29- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
30
31### stream(expected, [options])
32
33Check the hash of a stream without ever buffering it.  This is a pass through stream so you can do things like:
34
35```js
36fs.createReadStream('src')
37  .pipe(sha.stream('expected'))
38  .pipe(fs.createWriteStream('dest'))
39```
40
41`dest` will be a complete copy of `src` and an error will be emitted if the hash did not match `'expected'`.
42
43Options:
44
45- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
46
47## License
48
49You may use this software under the BSD or MIT.  Take your pick.  If you want me to release it under another license, open a pull request.