ibc-relayer 0.32.2

Implementation of an IBC Relayer in Rust, as a library
use bech32::{FromBase32, ToBase32};
use tiny_keccak::{Hasher, Keccak};

use super::errors::Error;

pub fn decode_bech32(input: &str) -> Result<Vec<u8>, Error> {
    let (_, data, _) = bech32::decode(input).map_err(Error::bech32_account)?;
    Vec::from_base32(&data).map_err(Error::bech32_account)
}

pub fn encode_bech32(account_prefix: &str, address: &[u8]) -> Result<String, Error> {
    bech32::encode(account_prefix, address.to_base32(), bech32::Variant::Bech32)
        .map_err(Error::bech32)
}

pub fn keccak256_hash(bytes: &[u8]) -> [u8; 32] {
    let mut hasher = Keccak::v256();
    hasher.update(bytes);
    let mut output = [0u8; 32];
    hasher.finalize(&mut output);
    output
}