#data-encoding #constant-time #hex #bech32 #base64 #security #binary-data

no-std subtle-encoding

Encoders and decoders for common data encodings (base64, bech32, hex) which avoid data-dependent branching/table lookups and therefore provide "best effort" constant time. Useful for encoding/decoding secret values such as cryptographic keys.

12 releases

0.5.1 Feb 8, 2020
0.5.0 Oct 14, 2019
0.4.1 Oct 7, 2019
0.3.7 Jun 5, 2019
0.3.0 Nov 25, 2018

#88 in Encoding

Download history 23271/week @ 2024-01-03 17253/week @ 2024-01-10 16113/week @ 2024-01-17 18310/week @ 2024-01-24 28268/week @ 2024-01-31 20821/week @ 2024-02-07 21988/week @ 2024-02-14 15970/week @ 2024-02-21 14596/week @ 2024-02-28 19749/week @ 2024-03-06 27520/week @ 2024-03-13 18557/week @ 2024-03-20 17743/week @ 2024-03-27 19310/week @ 2024-04-03 17669/week @ 2024-04-10 18576/week @ 2024-04-17

76,395 downloads per month
Used in 277 crates (57 directly)

Apache-2.0 OR MIT


subtle-encoding iqlusion

Crate Docs Apache 2.0/MIT Licensed MSRV Safety Dance Build Status Gitter Chat

Rust crate for encoding/decoding binary data to/from base64 and hex encodings while avoiding data-dependent branching/table lookups, and therefore providing "best effort" constant-time operation.

Also includes a non-constant-time Bech32 encoder/decoder gated under the bech32-preview Cargo feature (with a goal of eventually making it constant-time).

Useful for encoding/decoding secret values such as cryptographic keys.


Minimum Supported Rust Version

  • Rust 1.39

Security Notice

While this crate takes care to avoid data-dependent branching, that does not actually make it "constant time", which is an architecture-dependent property.

This crate is a "best effort" attempt at providing a constant time encoding library, however it presently provides no guarantees, nor has it been independently audited for security vulnerabilities.

Use at your own risk.


Copyright © 2018-2020 iqlusion

subtle-encoding is distributed under the terms of either the MIT license or the Apache License (Version 2.0), at your option.

See LICENSE (Apache License, Version 2.0) file in the iqlusioninc/crates toplevel directory of this repository or LICENSE-MIT for details.