Move to_bytes_64 to to_bytes for radix51

This commit is contained in:
Henry de Valence 2017-03-12 23:18:37 -07:00
parent 7591c74018
commit b515e43dfd

View file

@ -75,46 +75,6 @@ pub fn mul64(a: &[u64;5], b: &[u64;5]) -> [u64;5] {
[c0,c1,c2,c3,c4]
}
fn to_bytes_64(limbs: &[u64;5]) -> [u8;32] {
let mut s = [0u8;32];
s[ 0] = limbs[0] as u8;
s[ 1] = (limbs[0] >> 8) as u8;
s[ 2] = (limbs[0] >> 16) as u8;
s[ 3] = (limbs[0] >> 24) as u8;
s[ 4] = (limbs[0] >> 32) as u8;
s[ 5] = (limbs[0] >> 40) as u8;
s[ 6] = ((limbs[0] >> 48) | (limbs[1] << 3)) as u8;
s[ 7] = (limbs[1] >> 5) as u8;
s[ 8] = (limbs[1] >> 13) as u8;
s[ 9] = (limbs[1] >> 21) as u8;
s[10] = (limbs[1] >> 29) as u8;
s[11] = (limbs[1] >> 37) as u8;
s[12] = ((limbs[1] >> 45) | (limbs[2] << 6)) as u8;
s[13] = (limbs[2] >> 2) as u8;
s[14] = (limbs[2] >> 10) as u8;
s[15] = (limbs[2] >> 18) as u8;
s[16] = (limbs[2] >> 26) as u8;
s[17] = (limbs[2] >> 34) as u8;
s[18] = (limbs[2] >> 42) as u8;
s[19] = ((limbs[2] >> 50) | (limbs[3] << 1)) as u8;
s[20] = (limbs[3] >> 7) as u8;
s[21] = (limbs[3] >> 15) as u8;
s[22] = (limbs[3] >> 23) as u8;
s[23] = (limbs[3] >> 31) as u8;
s[24] = (limbs[3] >> 39) as u8;
s[25] = ((limbs[3] >> 47) | (limbs[4] << 4)) as u8;
s[26] = (limbs[4] >> 4) as u8;
s[27] = (limbs[4] >> 12) as u8;
s[28] = (limbs[4] >> 20) as u8;
s[29] = (limbs[4] >> 28) as u8;
s[30] = (limbs[4] >> 36) as u8;
s[31] = (limbs[4] >> 44) as u8;
//Clear high bit
s[31] &= 127u8;
return s
}
/// With the `radix51` feature enabled, `FieldElements` are represented
/// in radix 2^51 as five `u64`s.
@ -685,10 +645,54 @@ impl FieldElement {
s[31] = (h[9] >> 18) as u8;
//Clear high bit
debug_assert!((s[31] & 0b1000_0000u8) == 0u8);
s[31] &= 127u8;
s
}
#[cfg(feature="radix_51")]
pub fn to_bytes(&self) -> [u8;32] {
// XXX need to do reduction first
let mut s = [0u8;32];
s[ 0] = self.0[0] as u8;
s[ 1] = (self.0[0] >> 8) as u8;
s[ 2] = (self.0[0] >> 16) as u8;
s[ 3] = (self.0[0] >> 24) as u8;
s[ 4] = (self.0[0] >> 32) as u8;
s[ 5] = (self.0[0] >> 40) as u8;
s[ 6] = ((self.0[0] >> 48) | (self.0[1] << 3)) as u8;
s[ 7] = (self.0[1] >> 5) as u8;
s[ 8] = (self.0[1] >> 13) as u8;
s[ 9] = (self.0[1] >> 21) as u8;
s[10] = (self.0[1] >> 29) as u8;
s[11] = (self.0[1] >> 37) as u8;
s[12] = ((self.0[1] >> 45) | (self.0[2] << 6)) as u8;
s[13] = (self.0[2] >> 2) as u8;
s[14] = (self.0[2] >> 10) as u8;
s[15] = (self.0[2] >> 18) as u8;
s[16] = (self.0[2] >> 26) as u8;
s[17] = (self.0[2] >> 34) as u8;
s[18] = (self.0[2] >> 42) as u8;
s[19] = ((self.0[2] >> 50) | (self.0[3] << 1)) as u8;
s[20] = (self.0[3] >> 7) as u8;
s[21] = (self.0[3] >> 15) as u8;
s[22] = (self.0[3] >> 23) as u8;
s[23] = (self.0[3] >> 31) as u8;
s[24] = (self.0[3] >> 39) as u8;
s[25] = ((self.0[3] >> 47) | (self.0[4] << 4)) as u8;
s[26] = (self.0[4] >> 4) as u8;
s[27] = (self.0[4] >> 12) as u8;
s[28] = (self.0[4] >> 20) as u8;
s[29] = (self.0[4] >> 28) as u8;
s[30] = (self.0[4] >> 36) as u8;
s[31] = (self.0[4] >> 44) as u8;
//Clear high bit
debug_assert!((s[31] & 0b1000_0000u8) == 0u8);
s[31] &= 127u8;
return s
}
/// XXX clarify documentation
/// Determine if this field element, represented as a byte array,