crunchy
SIMD-optimized hashing, checksums and CRCs
Summary
| Latest Version | Unknown |
|---|---|
| License | MIT |
| CI Status | Failing |
| Downloads | 0 |
| Last Indexed | 2026-07-21 05:25 |
Tags
Installation
nimble install crunchy
choosenim install crunchy
git clone https://github.com/guzba/crunchy
OS Compatibility
| Platform | Linux | macOS | Windows | FreeBSD | OpenBSD | NetBSD | Android | iOS | WASM | Embedded |
|---|---|---|---|---|---|---|---|---|---|---|
| crunchy | ✓ | ✓ | ✓ | - | - | - | - | - | - | - |
Source
| Repository | https://github.com/guzba/crunchy |
|---|---|
| Homepage | https://github.com/guzba/crunchy |
| Registry Source | nimble_official |
README
Crunchy
nimble install crunchy
About
Crunchy provides pure Nim implementations of common hashes and data integrity checks (cyclic redundancy checks and checksums). These implementations are intended to be high-performance, including amd64 and arm64 SIMD implementations or using instruction set intrinsics.
| Function | Scalar | SIMD: | amd64 | arm64 |
|---|---|---|---|---|
| SHA-1 | ✅ | ⛔ | ⛔ | |
| SHA-256 | ✅ | ✅ | ⛔ | |
| CRC-32 | ✅ | ✅ | ✅ | |
| CRC-32C | ⛔ | ✅ | ⛔ | |
| Adler-32 | ✅ | ✅ | ✅ |
Crunchy is a new repo so keep an eye on releases for more functions and SIMD optimization.
Examples
Runnable examples using Crunchy can be found in the examples/ folder.
Here is a basic example that prints the hex-encoded SHA-256 of a string:
import crunchy
let data = "The quick brown fox jumps over the lazy dog"
echo sha256(data).toHex()
Or calculating the CRC-32 of a string:
import crunchy
let data = "The quick brown fox jumps over the lazy dog"
echo crc32(data)
Now, lets say you want to compute the CRC-32 of a file. Many approaches are possible, but lets look at these two:
First, the easy way. Just read the file into memory and compute:
import crunchy
let data = readFile("tests/data/zlib.rfc")
echo crc32(data)
Alternatively, to avoid copying the file, memory-map the file and compute instead:
import crunchy, std/memfiles
var memFile = memfiles.open("tests/data/zlib.rfc")
echo crc32(memFile.mem, memFile.size)
memFile.close()
Memory-mapping the file is great if the file is very large or you want to avoid copying a large file's contents. This uses Crunchy's pointer + len API.
Testing
nimble test