#base64 #bech32 #constant-time #hex #security

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 unstable releases (3 breaking)

✓ Uses Rust 2018 edition

0.3.3 Mar 12, 2019
0.3.2 Dec 25, 2018
0.3.0 Nov 25, 2018
0.3.0-alpha1 Oct 16, 2018
0.0.0 Oct 2, 2018

#168 in Encoding

Download history 112/week @ 2018-11-27 70/week @ 2018-12-04 42/week @ 2018-12-11 120/week @ 2018-12-18 76/week @ 2018-12-25 38/week @ 2019-01-01 98/week @ 2019-01-08 38/week @ 2019-01-15 21/week @ 2019-01-22 25/week @ 2019-01-29 10/week @ 2019-02-05 32/week @ 2019-02-12 38/week @ 2019-02-19 79/week @ 2019-02-26 46/week @ 2019-03-05

220 downloads per month
Used in 6 crates (5 directly)

Apache-2.0 OR MIT


subtle-encoding iqlusion

Crate Docs Apache 2.0/MIT Licensed Build Status unsafe: forbidden

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.

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


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.


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.


~20K SLoC