What hashing algorithms do I have access to when building a Substrate runtime module?
Can I import other hashing algorithms to be used within a Substrate runtime module?
As of writing this post, Substrate provides a HashingApi trait in the core/sr-io crate which provides the following hash functions:
export_api! {
pub(crate) trait HashingApi {
/// Conduct a 256-bit Keccak hash.
fn keccak_256(data: &[u8]) -> [u8; 32] ;
/// Conduct a 128-bit Blake2 hash.
fn blake2_128(data: &[u8]) -> [u8; 16];
/// Conduct a 256-bit Blake2 hash.
fn blake2_256(data: &[u8]) -> [u8; 32];
/// Conduct four XX hashes to give a 256-bit result.
fn twox_256(data: &[u8]) -> [u8; 32];
/// Conduct two XX hashes to give a 128-bit result.
fn twox_128(data: &[u8]) -> [u8; 16];
/// Conduct two XX hashes to give a 64-bit result.
fn twox_64(data: &[u8]) -> [u8; 8];
}
}
Because these functions are written for the Runtime, which must build to Wasm, they must compile without the use of the standard Rust library (std).
If you want to introduce new hashing algorithms or any new library to your Substrate runtime, you must make sure that it too can be built without std, but other than that, I believe the sky is the limit.