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}