Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crc32

crc32 is a small, pure Gleam library for calculating CRC-32/ISO-HDLC checksums.

It implements the conventional reflected CRC-32 variant commonly used by ZIP, gzip, PNG, and Ethernet. The library supports both one-shot checksum calculation and immutable incremental processing of data in chunks.

Installation

gleam add crc32

Quick start

import crc32

pub fn main() {
  let checksum = crc32.checksum(<<"123456789":utf8>>)
  assert checksum == 0xCBF43926
}

The returned value is the finalized CRC-32 checksum as a Gleam Int.

Usage

Calculate a checksum

import crc32

pub fn main() {
  let checksum = crc32.checksum(<<"hello":utf8>>)
  assert checksum == 0x3610A686
}

Incremental checksums

CRC-32 calculations can be built incrementally using an immutable, pipeline-friendly state.

import crc32

pub fn main() {
  let checksum =
    crc32.new()
    |> crc32.update(<<"hello ":utf8>>)
    |> crc32.update(<<"world":utf8>>)
    |> crc32.finalize()
}

Processing data incrementally produces the same checksum as processing the complete byte sequence at once:

crc32.checksum(<<"hello world":utf8>>)

Verify a checksum

An incremental CRC calculation can be verified directly against an expected checksum.

import crc32

pub fn main() {
  let valid =
    crc32.new()
    |> crc32.update(<<"hello ":utf8>>)
    |> crc32.update(<<"world":utf8>>)
    |> crc32.verify(expected_checksum)
}

verify returns True when the calculated CRC-32 checksum matches the expected value.

Stability and versioning

This package starts at 0.1.0 and remains in the 0.x series until its public API has been exercised by at least one real consumer package.

During 0.x:

  • bug fixes increment the patch version, for example 0.1.0 -> 0.1.1
  • breaking public API changes increment the minor version, for example 0.1.x -> 0.2.0

API

The library intentionally exposes a small API:

pub type Crc32

pub fn checksum(data: BitArray) -> Int

pub fn new() -> Crc32

pub fn update(crc: Crc32, data: BitArray) -> Crc32

pub fn finalize(crc: Crc32) -> Int

pub fn verify(crc: Crc32, expected: Int) -> Bool

Crc32 is an opaque value representing an incremental CRC-32 calculation in progress.

The internal accumulator is intentionally hidden so that intermediate CRC state cannot be confused with a finalized checksum.

CRC-32 variant

This package implements CRC-32/ISO-HDLC, commonly referred to as CRC-32 or IEEE CRC-32.

The standard check value for the ASCII byte sequence "123456789" is:

0xCBF43926

What CRC-32 is for

CRC-32 is designed to detect accidental changes or corruption in data.

Typical uses include:

  • File and archive integrity checks
  • Network and storage protocols
  • Binary formats
  • Structured identifiers and API keys
  • Detecting transcription or transport errors

CRC-32 is not a cryptographic hash.

It must not be used for password hashing, authentication, digital signatures, or protection against intentional modification.

Design

crc32 is intentionally small.

The package focuses on:

  • CRC-32/ISO-HDLC only
  • Pure Gleam
  • Immutable incremental state
  • Pipeline-friendly APIs
  • BitArray input
  • Predictable behavior across Gleam targets
  • Minimal dependencies

It does not attempt to provide a generic framework for arbitrary CRC models.

Development

gleam test

Development validation and certification details are documented in CERTIFICATION.md.

License

MIT License - Copyright (c) 2026 Antonio Ognio

Made with ❤️ from 🇵🇪. El Perú es clave 🔑.

About

Small, fast, and idiomatic Gleam CRC-32/ISO-HDLC with a clean incremental API, predictable behavior, and strong differential validation.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages