Add read_le and write_le to PrimeFieldRepr
This commit is contained in:
parent
dbe897d365
commit
98bab6877a
22
src/lib.rs
22
src/lib.rs
@ -407,6 +407,28 @@ pub trait PrimeFieldRepr:
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Writes this `PrimeFieldRepr` as a little endian integer.
|
||||||
|
fn write_le<W: Write>(&self, mut writer: W) -> io::Result<()> {
|
||||||
|
use byteorder::{LittleEndian, WriteBytesExt};
|
||||||
|
|
||||||
|
for digit in self.as_ref().iter() {
|
||||||
|
writer.write_u64::<LittleEndian>(*digit)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Reads a little endian integer into this representation.
|
||||||
|
fn read_le<R: Read>(&mut self, mut reader: R) -> io::Result<()> {
|
||||||
|
use byteorder::{LittleEndian, ReadBytesExt};
|
||||||
|
|
||||||
|
for digit in self.as_mut().iter_mut() {
|
||||||
|
*digit = reader.read_u64::<LittleEndian>()?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
|
@ -12,6 +12,9 @@ fn random_encoding_tests<R: PrimeFieldRepr>() {
|
|||||||
|
|
||||||
for _ in 0..1000 {
|
for _ in 0..1000 {
|
||||||
let r = R::rand(&mut rng);
|
let r = R::rand(&mut rng);
|
||||||
|
|
||||||
|
// Big endian
|
||||||
|
{
|
||||||
let mut rdecoded = R::default();
|
let mut rdecoded = R::default();
|
||||||
|
|
||||||
let mut v: Vec<u8> = vec![];
|
let mut v: Vec<u8> = vec![];
|
||||||
@ -20,6 +23,36 @@ fn random_encoding_tests<R: PrimeFieldRepr>() {
|
|||||||
|
|
||||||
assert_eq!(r, rdecoded);
|
assert_eq!(r, rdecoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Little endian
|
||||||
|
{
|
||||||
|
let mut rdecoded = R::default();
|
||||||
|
|
||||||
|
let mut v: Vec<u8> = vec![];
|
||||||
|
r.write_le(&mut v).unwrap();
|
||||||
|
rdecoded.read_le(&v[0..]).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(r, rdecoded);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut rdecoded_le = R::default();
|
||||||
|
let mut rdecoded_be_flip = R::default();
|
||||||
|
|
||||||
|
let mut v: Vec<u8> = vec![];
|
||||||
|
r.write_le(&mut v).unwrap();
|
||||||
|
|
||||||
|
// This reads in little-endian, so we are done.
|
||||||
|
rdecoded_le.read_le(&v[..]).unwrap();
|
||||||
|
|
||||||
|
// This reads in big-endian, so we perform a swap of the
|
||||||
|
// bytes beforehand.
|
||||||
|
let v: Vec<u8> = v.into_iter().rev().collect();
|
||||||
|
rdecoded_be_flip.read_be(&v[..]).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(rdecoded_le, rdecoded_be_flip);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn random_shl_tests<R: PrimeFieldRepr>() {
|
fn random_shl_tests<R: PrimeFieldRepr>() {
|
||||||
|
Loading…
Reference in New Issue
Block a user