mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Move to_bytes_64 to to_bytes for radix51
This commit is contained in:
parent
7591c74018
commit
b515e43dfd
1 changed files with 44 additions and 40 deletions
84
src/field.rs
84
src/field.rs
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue