| Crates.io | ctutils |
| lib.rs | ctutils |
| version | 0.4.0 |
| created_at | 2025-12-18 01:20:59.958852+00 |
| updated_at | 2026-01-20 02:55:14.205641+00 |
| description | Constant-time utility library with selection and equality testing support targeting cryptographic applications. Supports `const fn` where appropriate. Built on the `cmov` crate which provides architecture-specific predication intrinsics. Heavily inspired by the `subtle` crate. |
| homepage | https://github.com/RustCrypto/utils/tree/master/ctselect |
| repository | https://github.com/RustCrypto/utils |
| max_upload_size | |
| id | 1991483 |
| size | 131,977 |
Constant-time utility library with selection and equality testing support targeting cryptographic
applications. Supports const fn where appropriate. Built on the cmov crate which provides
architecture-specific predication intrinsics. Heavily inspired by the subtle crate.
This crate contains constant-time equivalents of the bool and Option types (Choice and
CtOption respectively), along with traits that can be used in combination with them.
The CtOption type notably provides eagerly evaluated combinator methods (as opposed to the lazily
evaluated combinators on Option) which make it possible to write constant-time code using
an idiomatic Rust style.
This is an experimental next-generation constant-time library inspired by subtle, but for now we
recommend you continue to stick with subtle. We may attempt to get some of the changes in this
library incorporated into subtle for a potential v3.0.
subtle?const fn support
Choice are const fnChoice can be constructed using various const fn predicates on integer types, enabling
writing constant-time const fn logicCtOption supports const fn constructors and *_copied methods to access the inner value
when it's a Copy typeCtOption pseudo-combinators: map! and unwrap_or!CtOption combinators that more closely mirrors std::option::Optionx86(_64) and aarch64
using asm! implementations in the cmov crate which call special constant-time CPU instructions
with a portable "best effort" fallback on other platforms using bitwise arithmetic and black_boxCopy bounds, which means all functionality can work with heap-allocated types in addition to
stack-allocatedCtFind and CtLookup for arrays and slicesMany features of this crate are extractions from the crypto-bigint crate, where we implement all
core logic as const fn and needed solutions for implementing constant-time code despite the
unique constraints it imposes.
The implementation contained in this crate has never been independently audited!
USE AT YOUR OWN RISK!
MSRV increases are not considered breaking changes and can happen in patch releases.
The crate MSRV accounts for all supported targets and crate feature combinations.
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.