Use black_box to help obscure the dalek-ff-group bool -> Choice conversion

I have no idea if this will actually help, yet it can't hurt.

Feature gated due to MSRV requirements.

Fixes #242.
This commit is contained in:
Luke Parker 2023-03-07 04:22:57 -05:00
parent adb5f34fda
commit c358090f16
No known key found for this signature in database
3 changed files with 12 additions and 2 deletions

View file

@ -29,3 +29,6 @@ curve25519-dalek = "^3.2"
[dev-dependencies]
ff-group-tests = { path = "../ff-group-tests" }
[features]
black_box = []

View file

@ -43,7 +43,14 @@ pub mod field;
// Convert a boolean to a Choice in a *presumably* constant time manner
fn choice(value: bool) -> Choice {
Choice::from(u8::from(value))
#[cfg(not(feature = "black_box"))]
let res = Choice::from(u8::from(value));
#[cfg(feature = "black_box")]
let res = {
use core::hint::black_box;
Choice::from(black_box(u8::from(black_box(value))))
};
res
}
macro_rules! deref_borrow {

View file

@ -24,7 +24,7 @@ group = "0.12"
curve25519-dalek = { version = "3", features = ["std"] }
transcript = { package = "flexible-transcript", path = "../crypto/transcript", features = ["recommended"] }
dalek-ff-group = { path = "../crypto/dalek-ff-group" }
dalek-ff-group = { path = "../crypto/dalek-ff-group", features = ["black_box"] }
frost = { package = "modular-frost", path = "../crypto/frost", features = ["ed25519"] }
monero-serai = { path = "../coins/monero", features = ["multisig"] }