diff --git a/coins/monero/src/block/merkle_root.rs b/coins/monero/src/block/merkle_root.rs index 9ad40aef..00eb0354 100644 --- a/coins/monero/src/block/merkle_root.rs +++ b/coins/monero/src/block/merkle_root.rs @@ -29,7 +29,7 @@ fn tree_hash_cnt(count: usize) -> usize { } fn hash_concat(a: [u8; 32], b: [u8; 32]) -> [u8; 32] { - let mut v = [a, b].concat(); + let v = [a, b].concat(); hash(&v) } diff --git a/coins/monero/src/ringct/borromean.rs b/coins/monero/src/ringct/borromean.rs index 3c2240b3..ab81d212 100644 --- a/coins/monero/src/ringct/borromean.rs +++ b/coins/monero/src/ringct/borromean.rs @@ -17,23 +17,27 @@ fn read_64_array io::Result>( #[derive(Clone, PartialEq, Eq, Debug)] pub struct BorroSig { - pub s0: [Scalar; 64], - pub s1: [Scalar; 64], - pub ee: Scalar, + pub s0: [[u8; 32]; 64], + pub s1: [[u8; 32]; 64], + pub ee: [u8; 32], } impl BorroSig { pub fn read(r: &mut R) -> io::Result { Ok(BorroSig { - s0: read_64_array(read_scalar, r)?, - s1: read_64_array(read_scalar, r)?, - ee: read_scalar(r)?, + s0: read_64_array(read_bytes, r)?, + s1: read_64_array(read_bytes, r)?, + ee: read_bytes(r)?, }) } pub fn write(&self, w: &mut W) -> io::Result<()> { - write_raw_vec(write_scalar, &self.s0, w)?; - write_raw_vec(write_scalar, &self.s1, w)?; - write_scalar(&self.ee, w) + for s0 in self.s0.iter() { + w.write_all(s0)?; + } + for s1 in self.s1.iter() { + w.write_all(s1)?; + } + w.write_all(&self.ee) } } diff --git a/coins/monero/src/ringct/mlsag/mod.rs b/coins/monero/src/ringct/mlsag/mod.rs index 06ff3ed6..7a3c2f1e 100644 --- a/coins/monero/src/ringct/mlsag/mod.rs +++ b/coins/monero/src/ringct/mlsag/mod.rs @@ -1,11 +1,10 @@ use std::io; use std::io::{Read, Write}; -use curve25519_dalek::edwards::EdwardsPoint; + use curve25519_dalek::scalar::Scalar; use crate::{ - Commitment, random_scalar, hash_to_scalar, wallet::decoys::Decoys, ringct::hash_to_point, serialize::*, }; diff --git a/coins/monero/src/ringct/mod.rs b/coins/monero/src/ringct/mod.rs index aaf7e77e..7b33de51 100644 --- a/coins/monero/src/ringct/mod.rs +++ b/coins/monero/src/ringct/mod.rs @@ -35,7 +35,7 @@ pub enum EcdhInfo { } impl EcdhInfo { - pub fn read(rct_type: u8, r: &mut R) -> io::Result<(EcdhInfo)> { + pub fn read(rct_type: u8, r: &mut R) -> io::Result { Ok(match rct_type { 0 ..= 3 => EcdhInfo::Standard { mask: read_scalar(r)?, amount: read_scalar(r)? }, _ => EcdhInfo::Bulletproof { amount: read_bytes(r)? }, @@ -80,7 +80,6 @@ impl RctBase { } write_raw_vec(write_point, &self.commitments, w) } - _ => panic!("Serializing unknown RctType's Base"), } } diff --git a/coins/monero/src/wallet/mod.rs b/coins/monero/src/wallet/mod.rs index 2ac16cb3..92f51d51 100644 --- a/coins/monero/src/wallet/mod.rs +++ b/coins/monero/src/wallet/mod.rs @@ -98,14 +98,14 @@ fn amount_decryption(amount: &EcdhInfo, key: Scalar) -> u64 { EcdhInfo::Standard { mask, amount } => { let shared_sec1 = hash(key.as_bytes()); let shared_sec2 = hash(&shared_sec1); - let mask_scalar = mask - Scalar::from_bytes_mod_order(shared_sec1); + let _mask_scalar = mask - Scalar::from_bytes_mod_order(shared_sec1); let amount_scalar = amount - Scalar::from_bytes_mod_order(shared_sec2); // get first 64 bits (d2b in rctTypes.cpp) let amount_significant_bytes = amount_scalar.to_bytes()[0 .. 8].try_into().expect("Can't fail"); - let amount = u64::from_le_bytes(amount_significant_bytes); - amount + + u64::from_le_bytes(amount_significant_bytes) } EcdhInfo::Bulletproof { amount } => { u64::from_le_bytes(amount_encryption(u64::from_le_bytes(*amount), key))