| - normalized crc iteration logic - added browser demo - added command line tool crc32 - fixed unicode baseline script (node 6 changed default array printing) - fixed performance tests (benchmark module changed behavior) - updated travis versions for test - miscellaneous adjustments to tooling | ||
|---|---|---|
| bin | ||
| bits | ||
| ctest | ||
| demo | ||
| misc | ||
| perf | ||
| test_files | ||
| .flowconfig | ||
| .gitignore | ||
| .jscs.json | ||
| .jshintrc | ||
| .npmignore | ||
| .travis.yml | ||
| crc32.flow.js | ||
| crc32.js | ||
| index.html | ||
| LICENSE | ||
| Makefile | ||
| package.json | ||
| perf.txt | ||
| README.md | ||
| test.js | ||
crc32
Standard CRC-32 algorithm implementation in JS (for the browser and nodejs). Emphasis on correctness and performance.
Installation
With npm:
$ npm install crc-32
In the browser:
<script src="crc32.js"></script>
The browser exposes a variable ADLER32
When installed globally, npm installs a script crc32 that computes the
checksum for a specified file or standard input.
The script will manipulate module.exports if available (e.g. in a CommonJS
require context).  This is not always desirable.  To prevent the behavior,
define DO_NOT_EXPORT_CRC
Usage
In all cases, the relevant function takes a single argument representing data.
The return value is a signed 32-bit integer.
- 
CRC32.buf(byte array or buffer)assumes the argument is a set of 8-bit unsigned integers (e.g. nodejsBufferor simple array of ints).
- 
CRC32.bstr(binary string)interprets the argument as a binary string where thei-th byte is the low byte of the UCS-2 char:str.charCodeAt(i) & 0xFF
- 
CRC32.str(string)interprets the argument as a standard JS string
For example:
> // var CRC32 = require('crc-32'); // uncomment this line if in node
> CRC32.str("SheetJS")                          // -1647298270
> CRC32.bstr("SheetJS")                         // -1647298270
> CRC32.buf([ 83, 104, 101, 101, 116, 74, 83 ]) // -1647298270
> [CRC32.str("\u2603"),  CRC32.str("\u0003")]   // [ -1743909036,  1259060791 ]
> [CRC32.bstr("\u2603"), CRC32.bstr("\u0003")]  // [  1259060791,  1259060791 ]
> [CRC32.buf([0x2603]),  CRC32.buf([0x0003])]   // [  1259060791,  1259060791 ]
Testing
make test will run the nodejs-based test.
To run the in-browser tests, run a local server and go to the ctest directory.
make ctestserv will start a python SimpleHTTPServer server on port 8000.
To update the browser artifacts, run make ctest.
To generate the bits file, use the crc32 function from python zlib:
>>> from zlib import crc32
>>> x="foo bar baz٪☃🍣"
>>> crc32(x)
1531648243
>>> crc32(x+x)
-218791105
>>> crc32(x+x+x)
1834240887
The included crc32.njs script can process files or stdin:
$ echo "this is a test" > t.txt
$ bin/crc32.njs t.txt
1912935186
For comparison, the included crc32.py script uses python zlib:
$ bin/crc32.py t.txt
1912935186
Performance
make perf will run algorithmic performance tests (which should justify certain
decisions in the code).
js-adler32 has more performance notes
License
Please consult the attached LICENSE file for details. All rights not explicitly granted by the Apache 2.0 license are reserved by the Original Author.