1use crate::primitives::arithmetic::{Field, Group};
3
4pub trait Mode: 'static {
6 const BLINDING: bool;
8 fn sample<F: Field>() -> F;
10 fn mask<G: Group>(value: G, base: &G, blind: &G::Scalar) -> G;
12}
13
14pub struct Transparent;
16impl Mode for Transparent {
17 const BLINDING: bool = false;
18 fn sample<F: Field>() -> F {
19 F::zero()
20 }
21 fn mask<G: Group>(value: G, _base: &G, _blind: &G::Scalar) -> G {
22 value
23 }
24}
25
26#[cfg(feature = "zk")]
28pub struct ZK;
29#[cfg(feature = "zk")]
30impl Mode for ZK {
31 const BLINDING: bool = true;
32 fn sample<F: Field>() -> F {
33 F::random()
34 }
35 fn mask<G: Group>(value: G, base: &G, blind: &G::Scalar) -> G {
36 value + base.scale(blind)
37 }
38}