arnaucube
arnaucube/testudoPublic Self-hosted repository
testudo/src/scalar/mod.rs
src/scalar/mod.rsRaw
 1mod ristretto255;
 2
 3pub type Scalar = ristretto255::Scalar;
 4pub type ScalarBytes = curve25519_dalek::scalar::Scalar;
 5
 6pub trait ScalarFromPrimitives {
 7  fn to_scalar(self) -> Scalar;
 8}
 9
10impl ScalarFromPrimitives for usize {
11  #[inline]
12  fn to_scalar(self) -> Scalar {
13    (0..self).map(|_i| Scalar::one()).sum()
14  }
15}
16
17impl ScalarFromPrimitives for bool {
18  #[inline]
19  fn to_scalar(self) -> Scalar {
20    if self {
21      Scalar::one()
22    } else {
23      Scalar::zero()
24    }
25  }
26}
27
28pub trait ScalarBytesFromScalar {
29  fn decompress_scalar(s: &Scalar) -> ScalarBytes;
30  fn decompress_vec(v: &Vec<Scalar>) -> Vec<ScalarBytes>;
31  fn decompress_seq(s: &[Scalar]) -> Vec<ScalarBytes>;
32}
33
34impl ScalarBytesFromScalar for Scalar {
35  fn decompress_scalar(s: &Scalar) -> ScalarBytes {
36    ScalarBytes::from_bytes_mod_order(s.to_bytes())
37  }
38
39  fn decompress_vec(v: &Vec<Scalar>) -> Vec<ScalarBytes> {
40    (0..v.len())
41      .map(|i| Scalar::decompress_scalar(&v[i]))
42      .collect::<Vec<ScalarBytes>>()
43  }
44
45  fn decompress_seq(s: &[Scalar]) -> Vec<ScalarBytes> {
46    (0..s.len())
47      .map(|i| Scalar::decompress_scalar(&s[i]))
48      .collect::<Vec<ScalarBytes>>()
49  }
50}