mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-17 19:01:20 +00:00
Use a 32 byte array instead of 64 one
This commit is contained in:
@ -45,10 +45,8 @@ impl From<io::Error> for Error {
|
|||||||
///
|
///
|
||||||
/// [`Cache`]: trait.Cache.html
|
/// [`Cache`]: trait.Cache.html
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||||
// WasmHash is made up of two 32 byte arrays instead of a 64 byte array
|
// WasmHash is made up of a 32 byte array
|
||||||
// because derive only works on fixed sized arrays size 32 or below
|
pub struct WasmHash([u8; 32]);
|
||||||
// TODO: fix this when this gets fixed by improved const generics
|
|
||||||
pub struct WasmHash([u8; 32], [u8; 32]);
|
|
||||||
|
|
||||||
impl WasmHash {
|
impl WasmHash {
|
||||||
/// Hash a wasm module.
|
/// Hash a wasm module.
|
||||||
@ -57,18 +55,8 @@ impl WasmHash {
|
|||||||
/// This does no verification that the supplied data
|
/// This does no verification that the supplied data
|
||||||
/// is, in fact, a wasm module.
|
/// is, in fact, a wasm module.
|
||||||
pub fn generate(wasm: &[u8]) -> Self {
|
pub fn generate(wasm: &[u8]) -> Self {
|
||||||
let mut first_part = [0u8; 32];
|
let hash = blake3::hash(wasm);
|
||||||
// We don't use the second part for now, since the blake3 hash is 32 byte array
|
WasmHash(hash.into())
|
||||||
let second_part = [0u8; 32];
|
|
||||||
|
|
||||||
let mut hasher = blake3::Hasher::new();
|
|
||||||
hasher.update(wasm);
|
|
||||||
|
|
||||||
let hash = hasher.finalize();
|
|
||||||
let generic_array = hash.as_bytes();
|
|
||||||
|
|
||||||
first_part.copy_from_slice(&generic_array[0..32]);
|
|
||||||
WasmHash(first_part, second_part)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create the hexadecimal representation of the
|
/// Create the hexadecimal representation of the
|
||||||
@ -85,26 +73,22 @@ impl WasmHash {
|
|||||||
e
|
e
|
||||||
))
|
))
|
||||||
})?;
|
})?;
|
||||||
if bytes.len() != 64 {
|
if bytes.len() != 32 {
|
||||||
return Err(Error::DeserializeError(
|
return Err(Error::DeserializeError(
|
||||||
"Prehashed keys must deserialze into exactly 64 bytes".to_string(),
|
"Prehashed keys must deserialze into exactly 32 bytes".to_string(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
Ok(WasmHash(
|
Ok(WasmHash(
|
||||||
bytes[0..32].try_into().map_err(|e| {
|
bytes[0..32].try_into().map_err(|e| {
|
||||||
Error::DeserializeError(format!("Could not get first 32 bytes: {}", e))
|
Error::DeserializeError(format!("Could not get first 32 bytes: {}", e))
|
||||||
})?,
|
})?
|
||||||
bytes[32..64].try_into().map_err(|e| {
|
|
||||||
Error::DeserializeError(format!("Could not get last 32 bytes: {}", e))
|
|
||||||
})?,
|
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn into_array(self) -> [u8; 64] {
|
pub(crate) fn into_array(self) -> [u8; 32] {
|
||||||
let mut total = [0u8; 64];
|
let mut total = [0u8; 32];
|
||||||
total[0..32].copy_from_slice(&self.0);
|
total[0..32].copy_from_slice(&self.0);
|
||||||
total[32..64].copy_from_slice(&self.1);
|
|
||||||
total
|
total
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user