Common use-cases
This library provides the following common encodings:
HEXLOWER
: lowercase hexadecimalHEXLOWER_PERMISSIVE
: lowercase hexadecimal with case-insensitive decodingHEXUPPER
: uppercase hexadecimalHEXUPPER_PERMISSIVE
: uppercase hexadecimal with case-insensitive decodingBASE32
: RFC4648 base32BASE32_NOPAD
: RFC4648 base32 without paddingBASE32HEX
: RFC4648 base32hexBASE64
: RFC4648 base64BASE64_NOPAD
: RFC4648 base64 without paddingBASE64URL
: RFC4648 base64urlBASE64URL_NOPAD
: RFC4648 base64url without paddingBASE64_MIME
: RFC2045-like base64
Typical usage looks like:
// allocating functions
BASE64.encode
HEXLOWER.decode
// in-place functions
BASE32.encode_mut
BASE64_URL.decode_mut
See the documentation or the changelog for more details.
Custom use-cases
This library also provides the possibility to define custom little-endian ASCII base-conversion encodings for bases of size 2, 4, 8, 16, 32, and 64 (for which all above use-cases are particular instances). It supports:
- padded and non-padded encodings
- canonical encodings (e.g. trailing bits are checked)
- in-place encoding and decoding functions
- partial decoding functions (e.g. for error recovery)
- character translation (e.g. for case-insensitivity)
- most and least significant bit-order
- ignoring characters when decoding (e.g. for skipping newlines)
- wrapping the output when encoding
The typical definition of a custom encoding looks like:
lazy_static!
See the documentation or the changelog for more details.
Performance
The performance of the encoding and decoding functions (for both common and custom encodings) are similar to existing implementations in C, Rust, and other high-performance languages (see how to run the benchmarks on github).
Swiss-knife binary
This crate is a library. If you are looking for the binary using this library, see the installation instructions on github.