8 releases
0.1.7 | Mar 20, 2023 |
---|---|
0.1.6 | Jan 30, 2020 |
0.1.5 | Dec 23, 2019 |
0.1.3 | Feb 7, 2019 |
0.1.2 | Jan 30, 2019 |
#44 in #secret
699 downloads per month
Used in 12 crates
(4 directly)
27KB
472 lines
Rust secret integers
This simple crate provides integer wrappers that guarantee that they are being used in a constant-time fashion. Hence, division and direct comparison are disallowed. Using Rust's type system, this crate will help the compiler check systematically whether your cryptographic code is constant-time relative to secret inputs.
To use the crate, just import everything (use secret_integers::*;
) and replace your integer types with uppercase versions of their names (e.g. u8
-> U8
).
Examples
Two examples show how to use the crate : Dalek and Chacha20. To build theses examples, use
cargo build --example dalek
cargo build --example chacha20
However, if you try:
cargo build --example biguint
You will get the following error message:
error[E0599]: no method named `leading_zeros` found for type `&secret_integers::U32` in the current scope
--> examples/biguint.rs:24:46
|
24 | let zeros = self.data.last().unwrap().leading_zeros();
| ^^^^^^^^^^^^^
error[E0369]: binary operation `!=` cannot be applied to type `secret_integers::U32`
--> examples/biguint.rs:48:11
|
48 | while r != 0 {
| ^^^^^^
|
= note: an implementation of `std::cmp::PartialEq` might be missing for `secret_integers::U32`