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