A replacement for gleam_crypto that works on all targets.
13

Configure Feed

Select the types of activity you want to include in your feed.

Gleam 97.5%
JavaScript 2.1%
Erlang 0.4%
9 1 2

Clone this repository

https://tangled.org/becca.monster/munch https://tangled.org/did:plc:ocdyw44q4vbsfy5iz5z4qo53
git@tangled.org:becca.monster/munch git@tangled.org:did:plc:ocdyw44q4vbsfy5iz5z4qo53

For self-hosted knots, clone URLs may differ based on your setup.



README.md

munch#

Package Version Hex Docs

A fast, portable cryptographic hashing library for Gleam.

Like gleam_crypto, munch uses the platform's native cryptography implementation where possible. Unlike gleam_crypto, it also works in web browsers by falling back to pure Gleam implementations when no native option is available.

munch supports MD5, SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512, along with HMAC, constant-time comparison, signed messages, and secure random bytes. While the API differs in some places to support tree-shaking unused algorithms, it aims to be largely compatible with gleam_crypto.

Installation#

gleam add munch@1

Example#

import munch

pub fn main() {
  // Hash a UTF-8 string and return its base16-encoded digest.
  let digest = munch.hash(munch.sha256, "hello")

  // Authenticate a UTF-8 string and return its base16-encoded HMAC.
  let authentication_code = munch.hmac("message", munch.sha256, "secret")
}

Implementation and performance#

Each hash algorithm first attempts to create a native hashing context. On Erlang and supported server-side JavaScript runtimes, updates and finalization are handled by the same optimized native cryptography machinery used by the platform. This keeps the common server path fast while preserving the incremental API for large inputs.

If native hashing is unavailable, munch transparently uses its pure Gleam implementation. This implementation is not expected to match optimised native code for large inputs, but matches or is slightly faster than common JavaScript alternatives, like crypto-js.

Support and development#

Development happens on Tangled. Visit the repository there for bug reports and contributions.