#base32 #crockford #stacks-blockchain

no-std c32

Rust implementation of Crockford's Base32 encoding

4 releases (2 breaking)

0.4.0 Feb 10, 2025
0.3.0 Feb 6, 2025
0.2.1 Feb 4, 2025
0.2.0 Feb 4, 2025

#257 in Magic Beans

Download history 281/week @ 2025-02-04 62/week @ 2025-02-11

343 downloads per month

MIT/Apache

34KB
328 lines

c32

Crates.io Documentation Build Status License License: MIT

Rust implementation of Crockford's Base32 encoding scheme.

[dependencies]
c32 = "0.4.0"

Implementation

  • Lightweight — The core functionality has zero external dependencies.
  • Portable — Fully compatible with #![no_std] environments.
  • Safe — Implemented entirely in safe Rust with no unsafe blocks.

Examples

std or alloc

// encoding...
let bytes = b"usque ad finem";
let encoded = c32::encode(&bytes);
assert_eq!(encoded, "1TQ6WBNCMG62S10CSMPWSBD");
// decoding...
let bytes = b"usque ad finem";
let decoded = c32::decode("1TQ6WBNCMG62S10CSMPWSBD")?;
assert_eq!(decoded, bytes);

#![no_std]

// encoding...
let bytes = b"usque ad finem";
let mut buffer = [0; 32];

let written = c32::encode_into(bytes, &mut buffer)?;
let encoded = &buffer[..written];
assert_eq!(encoded, b"1TQ6WBNCMG62S10CSMPWSBD");
// decoding...
let encoded = b"1TQ6WBNCMG62S10CSMPWSBD";
let mut buffer = [0; 32];

let written = c32::decode_into(encoded, &mut buffer)?;
let decoded = &buffer[..written];
assert_eq!(decoded, b"usque ad finem");

Checksum

The check feature provides methods for encoding data with SHA256-based checksum verification.

std or alloc

// encoding...
let bytes = b"usque ad finem";
let encoded = c32::encode_check(bytes, 22)?;
assert_eq!(encoded, "P7AWVHENJJ0RB441K6JVK5DNJ7J3V5");
// decoding...
let encoded = "P7AWVHENJJ0RB441K6JVK5DNJ7J3V5";
let (version, decoded) = c32::decode_check(encoded)?;
assert_eq!(decoded, b"usque ad finem");
assert_eq!(version, 22);

#![no_std]

// encoding...
let bytes = b"usque ad finem";
let mut buffer = [0; 32];

let written = c32::encode_check_into(bytes, 22, &mut buffer)?;
let encoded = &buffer[..written];
assert_eq!(encoded, b"P7AWVHENJJ0RB441K6JVK5DNJ7J3V5");
// decoding...
let encoded = b"P7AWVHENJJ0RB441K6JVK5DNJ7J3V5";
let mut buffer = [0; 32];

let (version, written) = c32::decode_check_into(encoded, &mut buffer)?;
let decoded = &buffer[..written];
assert_eq!(decoded, b"usque ad finem");
assert_eq!(version, 22);

For more details, please refer to the full API Reference.

Security

For security-related concerns, please review the Security Policy.

License

Licensed under Apache License, Version 2.0 or MIT License at your discretion.

Contribution

Contributions to this crate will be dual-licensed under Apache-2.0 and MIT by default, unless specifically indicated otherwise.

Dependencies

~120KB