diff --git a/coins/monero/src/ringct/mlsag.rs b/coins/monero/src/ringct/mlsag.rs index 6999251f..0641646e 100644 --- a/coins/monero/src/ringct/mlsag.rs +++ b/coins/monero/src/ringct/mlsag.rs @@ -13,7 +13,7 @@ use crate::{hash_to_scalar, ringct::hash_to_point}; #[derive(Clone, PartialEq, Eq, Debug)] pub struct Mlsag { - pub ss: Vec<[Scalar; 2]>, + pub ss: Vec>, pub cc: Scalar, } @@ -25,9 +25,11 @@ impl Mlsag { write_scalar(&self.cc, w) } - pub fn read(mixins: usize, r: &mut R) -> io::Result { + pub fn read(mixins: usize, ss_2_elements: usize, r: &mut R) -> io::Result { Ok(Mlsag { - ss: (0 .. mixins).map(|_| read_array(read_scalar, r)).collect::>()?, + ss: (0 .. mixins) + .map(|_| read_raw_vec(read_scalar, ss_2_elements, r)) + .collect::>()?, cc: read_scalar(r)?, }) } diff --git a/coins/monero/src/ringct/mod.rs b/coins/monero/src/ringct/mod.rs index a706e3e4..da41b247 100644 --- a/coins/monero/src/ringct/mod.rs +++ b/coins/monero/src/ringct/mod.rs @@ -257,9 +257,13 @@ impl RctPrunable { ) -> io::Result { Ok(match rct_type { RctType::Null => RctPrunable::Null, - RctType::MlsagAggregate | RctType::MlsagIndividual => RctPrunable::MlsagBorromean { + RctType::MlsagAggregate => RctPrunable::MlsagBorromean { borromean: read_raw_vec(BorromeanRange::read, outputs, r)?, - mlsags: decoys.iter().map(|d| Mlsag::read(*d, r)).collect::>()?, + mlsags: vec![Mlsag::read(decoys[0], decoys.len() + 1, r)?], + }, + RctType::MlsagIndividual => RctPrunable::MlsagBorromean { + borromean: read_raw_vec(BorromeanRange::read, outputs, r)?, + mlsags: decoys.iter().map(|d| Mlsag::read(*d, 2, r)).collect::>()?, }, RctType::Bulletproofs | RctType::BulletproofsCompactAmount => { RctPrunable::MlsagBulletproofs { @@ -274,7 +278,7 @@ impl RctPrunable { } Bulletproofs::read(r)? }, - mlsags: decoys.iter().map(|d| Mlsag::read(*d, r)).collect::>()?, + mlsags: decoys.iter().map(|d| Mlsag::read(*d, 2, r)).collect::>()?, pseudo_outs: read_raw_vec(read_point, decoys.len(), r)?, } }