reference param in mul_scalar
arnaucube root@arnaucube.com
Tue, 10 Sep 2019 11:28:57 +0200
1 files changed,
12 insertions(+),
12 deletions(-)
jump to
M
src/lib.rs
→
src/lib.rs
@@ -82,13 +82,13 @@
Ok(Point { x: x, y: y }) } - pub fn mul_scalar(&self, n: BigInt) -> Result<Point, String> { + pub fn mul_scalar(&self, n: &BigInt) -> Result<Point, String> { // TODO use & in n to avoid clones on function call let mut r: Point = Point { x: Zero::zero(), y: One::one(), }; - let mut rem: BigInt = n; + let mut rem: BigInt = n.clone(); let mut exp: Point = self.clone(); let zero: BigInt = Zero::zero();@@ -190,7 +190,7 @@
impl PrivateKey { pub fn public(&self) -> Result<Point, String> { // https://tools.ietf.org/html/rfc8032#section-5.1.5 - let pk = B8.mul_scalar(self.key.clone())?; + let pk = B8.mul_scalar(&self.key)?; Ok(pk.clone()) }@@ -206,7 +206,7 @@ let (_, msg_bytes) = msg.to_bytes_be();
let r_bytes = utils::concatenate_arrays(s, &msg_bytes); let mut r = BigInt::from_bytes_be(Sign::Plus, &r_bytes[..]); r = utils::modulus(&r, &SUBORDER); - let r8: Point = B8.mul_scalar(r.clone())?; + let r8: Point = B8.mul_scalar(&r)?; let a = &self.public()?; let hm_input = vec![r8.x.clone(), r8.y.clone(), a.x.clone(), a.y.clone(), msg];@@ -235,7 +235,7 @@ let (_, msg_bytes) = msg.to_bytes_be();
let r_bytes = utils::concatenate_arrays(s, &msg_bytes); let mut r = BigInt::from_bytes_be(Sign::Plus, &r_bytes[..]); r = utils::modulus(&r, &SUBORDER); - let r8: Point = B8.mul_scalar(r.clone())?; + let r8: Point = B8.mul_scalar(&r)?; let a = &self.public()?; let hm_input = vec![r8.x.clone(), r8.y.clone(), a.x.clone(), a.y.clone(), msg];@@ -286,13 +286,13 @@ let hm = match mimc7.hash(hm_input) {
Result::Err(_) => return false, Result::Ok(hm) => hm, }; - let l = match B8.mul_scalar(sig.s) { + let l = match B8.mul_scalar(&sig.s) { Result::Err(_) => return false, Result::Ok(l) => l, }; let r = match sig .r_b8 - .add(&pk.mul_scalar(8.to_bigint().unwrap() * hm).unwrap()) + .add(&pk.mul_scalar(&(8.to_bigint().unwrap() * hm)).unwrap()) { Result::Err(_) => return false, Result::Ok(r) => r,@@ -315,13 +315,13 @@ let hm = match poseidon.hash(hm_input) {
Result::Err(_) => return false, Result::Ok(hm) => hm, }; - let l = match B8.mul_scalar(sig.s) { + let l = match B8.mul_scalar(&sig.s) { Result::Err(_) => return false, Result::Ok(l) => l, }; let r = match sig .r_b8 - .add(&pk.mul_scalar(8.to_bigint().unwrap() * hm).unwrap()) + .add(&pk.mul_scalar(&(8.to_bigint().unwrap() * hm)).unwrap()) { Result::Err(_) => return false, Result::Ok(r) => r,@@ -425,7 +425,7 @@ 10,
) .unwrap(), }; - let res_m = p.mul_scalar(3.to_bigint().unwrap()).unwrap(); + let res_m = p.mul_scalar(&3.to_bigint().unwrap()).unwrap(); let res_a = p.add(&p).unwrap(); let res_a = res_a.add(&p).unwrap(); assert_eq!(res_m.x, res_a.x);@@ -443,7 +443,7 @@ b"14035240266687799601661095864649209771790948434046947201833777492504781204499",
10, ) .unwrap(); - let res2 = p.mul_scalar(n).unwrap(); + let res2 = p.mul_scalar(&n).unwrap(); assert_eq!( res2.x.to_string(), "17070357974431721403481313912716834497662307308519659060910483826664480189605"@@ -568,7 +568,7 @@ h[31] = h[31] & 0x7F;
h[31] = h[31] | 0x40; let sk = BigInt::from_bytes_le(Sign::Plus, &h[..]); - let point = B8.mul_scalar(sk.clone()).unwrap(); + let point = B8.mul_scalar(&sk).unwrap(); let cmp_point = point.compress(); let dcmp_point = decompress_point(cmp_point).unwrap();