pub type Scalar = super::scalar_25519::Scalar; pub type ScalarBytes = curve25519_dalek::scalar::Scalar; pub trait ScalarFromPrimitives { fn to_scalar(self) -> Scalar; } impl ScalarFromPrimitives for usize { #[inline] fn to_scalar(self) -> Scalar { (0..self).map(|_i| Scalar::one()).sum() } } impl ScalarFromPrimitives for bool { #[inline] fn to_scalar(self) -> Scalar { if self { Scalar::one() } else { Scalar::zero() } } } pub trait ScalarBytesFromScalar { fn decompress_scalar(s: &Scalar) -> ScalarBytes; fn decompress_vec(v: &Vec) -> Vec; fn decompress_seq(s: &[Scalar]) -> Vec; } impl ScalarBytesFromScalar for Scalar { fn decompress_scalar(s: &Scalar) -> ScalarBytes { ScalarBytes::from_bytes_mod_order(s.to_bytes()) } fn decompress_vec(v: &Vec) -> Vec { (0..v.len()) .map(|i| Scalar::decompress_scalar(&v[i])) .collect::>() } fn decompress_seq(s: &[Scalar]) -> Vec { (0..s.len()) .map(|i| Scalar::decompress_scalar(&s[i])) .collect::>() } }