Skip to content

Commit

Permalink
Added documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderOMara committed Nov 3, 2024
1 parent 6d58760 commit 7f2c24c
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,56 @@
# HQTSM: CRC

CRC functions with a parameterized backend optimized for both speed and size

# Features

- Pure TypeScript, run anywhere
- Optimized for speed
- Table-based algorithm
- Minimal initialization code
- Optimized for size
- Shared engine < 500 bytes with standard web compression
- Tables generated on first use
- Minimal additional overhead to each variant
- Individually importable algorithms
- Over 100 known digests provided, plus the option of configuring your own
- Streamable interface, just call update for each chunk
- Number for small digests, 32-bit or less
- BigInt for larger digests
- Digest values always an unsigned integer
- Supports 8-bit typed arrays, regular arrays, and even array-like objects
- Pure methods, can be assigned directly to variables as needed

# Usage

## CRC-32/ISO-HDLC

The most-common 32-bit digest, used by PNG, ZIP, and more.

```js
import CRC32 from '@hqtsm/crc/crc-32/iso-hdlc';

let crc = CRC32.init();
crc = CRC32.update(crc, new TextEncoder().encode('123456789'));
crc = CRC32.finalize(crc);
console.log(crc.toString(16)); // cbf43926
```

## CRC-64/XZ

A common 64-bit digest, sometimes incorrectly refered to as ECMA-182.

```js
import CRC64 from '@hqtsm/crc/crc-64/xz';

let crc = CRC64.init();
crc = CRC64.update(crc, new TextEncoder().encode('123456789'));
crc = CRC64.finalize(crc);
console.log(crc.toString(16)); // 995dc9bbdf1939fa
```

# Acknowledgements

Thanks to pycrc for the inspiration and validation checking.

Thanks to CRC RevEng for documenting the different digests.

0 comments on commit 7f2c24c

Please sign in to comment.