From c6dc9d318d37629d7178615a9bb2b35f20998dcb Mon Sep 17 00:00:00 2001 From: Henry & Isis Date: Wed, 3 May 2017 19:06:41 -0700 Subject: [PATCH] Add a helper function to construct a Scalar from a u64 --- src/scalar.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/scalar.rs b/src/scalar.rs index 067f780..73b30f1 100644 --- a/src/scalar.rs +++ b/src/scalar.rs @@ -261,6 +261,15 @@ impl Scalar { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]) } + /// Construct a scalar from the given `u64`. + pub fn from_u64(x: u64) -> Scalar { + let mut s = Scalar::zero(); + for i in 0..8 { + s[i] = (x >> (i*8)) as u8; + } + s + } + /// Compute the multiplicative inverse of this scalar. pub fn invert(&self) -> Scalar { self.unpack().invert().pack() @@ -728,6 +737,20 @@ mod test { } } + #[test] + fn from_unsigned() { + let val = 0xdeadbeefdeadbeef; + let s = Scalar::from_u64(val); + assert_eq!(s[7], 0xde); + assert_eq!(s[6], 0xad); + assert_eq!(s[5], 0xbe); + assert_eq!(s[4], 0xef); + assert_eq!(s[3], 0xde); + assert_eq!(s[2], 0xad); + assert_eq!(s[1], 0xbe); + assert_eq!(s[0], 0xef); + } + #[test] fn scalar_multiply_by_one() { let one = Scalar::one();