getting there

This commit is contained in:
Sean Bowe 2015-12-28 00:15:16 -07:00
parent 0a3d848cbb
commit a0d56f3451

@ -113,15 +113,21 @@ fn temporary_shim(state: &mut [Byte]) {
let mut chunks = Vec::with_capacity(25); let mut chunks = Vec::with_capacity(25);
for i in 0..25 { for i in 0..25 {
let i = i * 8; chunks.push(Chunk::from(0x0000000000000000));
}
chunks.push(Chunk::from(&state[i..i+8])); for (chunk_bit, input_bit) in chunks.iter_mut().flat_map(|c| c.bits.iter_mut())
.zip(state.iter().flat_map(|c| c.bits.iter()))
{
*chunk_bit = input_bit.clone();
} }
keccakf(&mut chunks, 24); keccakf(&mut chunks, 24);
for (i, bit) in chunks.iter().flat_map(|c| c.bits.iter()).enumerate() { for (chunk_bit, input_bit) in chunks.iter().flat_map(|c| c.bits.iter())
state[i / 8].bits[i % 8] = bit.clone(); .zip(state.iter_mut().flat_map(|c| c.bits.iter_mut()))
{
*input_bit = chunk_bit.clone();
} }
} }
@ -309,6 +315,20 @@ struct Byte {
} }
impl Byte { impl Byte {
fn grab(&self) -> u8 {
let mut cur = 7;
let mut acc = 0;
for bit in &self.bits {
if let &Bit::Constant(1) = bit {
acc |= 0b00000001 << cur;
}
cur -= 1;
}
acc
}
fn xor(&self, other: &Byte) -> Byte { fn xor(&self, other: &Byte) -> Byte {
Byte { Byte {
bits: self.bits.iter() bits: self.bits.iter()
@ -385,13 +405,25 @@ fn test_shim() {
} }
} }
#[test]
fn byte_grab_works() {
{
let b = Bit::byte(0xef);
assert_eq!(0xef, b.grab());
}
}
#[test] #[test]
fn woohoo() { fn woohoo() {
let message = [Bit::byte(0x30)]; let message = [Bit::byte(0x30)];
let test = sha3_256(&message); let test = sha3_256(&message);
println!("{:?}", test); for i in 0..32 {
assert!(test[0] == Bit::byte(0xf9)); print!("{:02x} ", test[i].grab());
}
println!("");
panic!("fuck");
} }
#[test] #[test]