Expand description
§CT-Codecs
A Rust implementation of constant-time Base64 and Hexadecimal codecs, reimplemented from libsodium and libhydrogen.
§Features
- Constant-time implementation for cryptographic applications where timing attacks are a concern
- Strict validation ensuring Base64 strings are not malleable
- Multiple variants of Base64: standard, URL-safe, with and without padding
- Character filtering for ignoring specific characters during decoding (like whitespace)
- Zero dependencies and
no_stdcompatible - Memory safety with
#![forbid(unsafe_code)]
§Usage Examples
§Base64 Encoding
use ct_codecs::{Base64, Encoder};
let data = b"Hello, world!";
let encoded = Base64::encode_to_string(data)?;
assert_eq!(encoded, "SGVsbG8sIHdvcmxkIQ==");§Base64 Decoding
use ct_codecs::{Base64, Decoder};
let encoded = "SGVsbG8sIHdvcmxkIQ==";
let decoded = Base64::decode_to_vec(encoded, None)?;
assert_eq!(decoded, b"Hello, world!");§Hexadecimal Encoding/Decoding
use ct_codecs::{Hex, Encoder, Decoder};
let data = b"Hello, world!";
let encoded = Hex::encode_to_string(data)?;
let decoded = Hex::decode_to_vec(&encoded, None)?;
assert_eq!(decoded, data);§No-std Usage with Pre-allocated Buffers
use ct_codecs::{Base64, Encoder, Decoder};
let data = b"Hello, world!";
let mut encoded_buf = [0u8; 20]; // Must be large enough
let encoded = Base64::encode(&mut encoded_buf, data)?;
let mut decoded_buf = [0u8; 13]; // Must be large enough
let decoded = Base64::decode(&mut decoded_buf, encoded, None)?;
assert_eq!(decoded, data);Structs§
- Base64
- Standard Base64 encoder and decoder with padding.
- Base64
NoPadding - Standard Base64 encoder and decoder without padding.
- Base64
UrlSafe - URL-safe Base64 encoder and decoder with padding.
- Base64
UrlSafe NoPadding - URL-safe Base64 encoder and decoder without padding.
- Hex
- Hexadecimal encoder and decoder implementation.
Enums§
- Error
- Error type for ct-codecs operations.