lit_node_core/models/
blinders.rs

1use lit_rust_crypto::{
2    blsful::inner_types::*, decaf377, ed448_goldilocks, elliptic_curve::subtle::Choice, jubjub,
3    k256, p256, p384, pallas, vsss_rs::curve25519,
4};
5
6use serde::{Deserialize, Serialize};
7
8/// Blinders for the different curves for verifiable encryption
9#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize)]
10pub struct Blinders {
11    pub bls_blinder: Option<Scalar>,
12    pub k256_blinder: Option<k256::Scalar>,
13    pub p256_blinder: Option<p256::Scalar>,
14    pub p384_blinder: Option<p384::Scalar>,
15    pub ed25519_blinder: Option<curve25519::WrappedScalar>,
16    pub ristretto25519_blinder: Option<curve25519::WrappedScalar>,
17    pub ed448_blinder: Option<ed448_goldilocks::Scalar>,
18    pub jubjub_blinder: Option<jubjub::Scalar>,
19    pub decaf377_blinder: Option<decaf377::Fr>,
20    pub bls12381g1_blinder: Option<Scalar>,
21    pub pallas_blinder: Option<pallas::Scalar>,
22}
23
24impl Blinders {
25    pub fn are_blinders_set(&self) -> bool {
26        self.bls_blinder.is_some()
27            || self.k256_blinder.is_some()
28            || self.p256_blinder.is_some()
29            || self.p384_blinder.is_some()
30            || self.ed25519_blinder.is_some()
31            || self.ristretto25519_blinder.is_some()
32            || self.ed448_blinder.is_some()
33            || self.jubjub_blinder.is_some()
34            || self.decaf377_blinder.is_some()
35            || self.bls12381g1_blinder.is_some()
36            || self.pallas_blinder.is_some()
37    }
38
39    pub fn any_blinders_invalid(&self) -> bool {
40        let mut any = Choice::from(0u8);
41        if let Some(bls_blinder) = &self.bls_blinder {
42            any |= bls_blinder.is_zero();
43        }
44        if let Some(k256_blinder) = &self.k256_blinder {
45            any |= k256_blinder.is_zero();
46        }
47        if let Some(p256_blinder) = &self.p256_blinder {
48            any |= p256_blinder.is_zero();
49        }
50        if let Some(p384_blinder) = &self.p384_blinder {
51            any |= p384_blinder.is_zero();
52        }
53        if let Some(ed25519_blinder) = &self.ed25519_blinder {
54            any |= ed25519_blinder.is_zero();
55        }
56        if let Some(ristretto25519_blinder) = &self.ristretto25519_blinder {
57            any |= ristretto25519_blinder.is_zero();
58        }
59        if let Some(jubjub_blinder) = &self.jubjub_blinder {
60            any |= jubjub_blinder.is_zero();
61        }
62        if let Some(decaf377_blinder) = &self.decaf377_blinder {
63            any |= decaf377_blinder.is_zero();
64        }
65        if let Some(bls12381g1_blinder) = &self.bls12381g1_blinder {
66            any |= bls12381g1_blinder.is_zero();
67        }
68        if let Some(pallas_blinder) = &self.pallas_blinder {
69            any |= pallas_blinder.is_zero();
70        }
71
72        bool::from(any)
73    }
74}