blake2b 0.6.1

BLAKE2b hash function
Documentation
use std::mem::{size_of};
use std::ptr::{write_bytes};
use std::slice::{from_raw_parts, from_raw_parts_mut};

pub trait SliceExt {
	fn as_bytes(&self) -> &[u8];
	fn as_mut_bytes(&mut self) -> &mut [u8];
	fn zero(&mut self);
}

macro_rules! implement {
	($ty:ty) => {
		impl SliceExt for [$ty] {
			fn as_bytes(&self) -> &[u8] {
				unsafe { from_raw_parts(self.as_ptr() as *const u8, self.len() * size_of::<$ty>()) }
			}

			fn as_mut_bytes(&mut self) -> &mut [u8] {
				unsafe { from_raw_parts_mut(self.as_mut_ptr() as *mut u8, self.len() * size_of::<$ty>()) }
			}

			fn zero(&mut self) {
				unsafe { write_bytes(self.as_mut_ptr(), 0, self.len() * size_of::<$ty>()) }
			}
		}
	}
}

implement!(i8);
implement!(u8);
implement!(i16);
implement!(u16);
implement!(i32);
implement!(u32);
implement!(i64);
implement!(u64);
implement!(isize);
implement!(usize);