From fbb05946dde7a3eb3fc3a63b8eff655e4c234a74 Mon Sep 17 00:00:00 2001 From: mjkeating Date: Wed, 28 Nov 2018 12:13:25 -0800 Subject: [PATCH] tree_hash WIP --- beacon_chain/utils/ssz/src/tree_hash.rs | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 beacon_chain/utils/ssz/src/tree_hash.rs diff --git a/beacon_chain/utils/ssz/src/tree_hash.rs b/beacon_chain/utils/ssz/src/tree_hash.rs new file mode 100644 index 000000000..41d7a9e4d --- /dev/null +++ b/beacon_chain/utils/ssz/src/tree_hash.rs @@ -0,0 +1,36 @@ +extern crate blake2_rfc; + +use self::blake2_rfc::blake2s::blake2s; + +/** + * Extends data length to a power of 2 by minimally right-zero-padding + */ +fn extend_to_power_of_2(data: &mut Vec) { + let len = data.len(); + let new_len = len.next_power_of_two(); + if new_len > len { + data.append(&mut vec![0; new_len - len]); + } +} + +fn hash(data: Vec) -> Vec { + let result = blake2s(32, &[], data.as_slice()); + result.as_bytes().to_vec() +} + +// fn list_to_glob() {} +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_extend_to_power_of_2() { + let mut data = vec![1, 2, 3, 4, 5]; + + // an array length of 5 should be extended to + // a length of 8 (the next power of 2) by right + // padding it with 3 zeros + extend_to_power_of_2(&mut data); + assert_eq!(data, [1, 2, 3, 4, 5, 0, 0, 0]); + } +}