pub trait CRH: Clone + Debug + ToBytes + FromBytes + Send + Sync + From<Self::Parameters> {
type Output: Copy + Clone + Debug + Display + ToBytes + FromBytes + Eq + Hash + Default + Send + Sync;
type Parameters: Clone + Debug + Eq;
fn setup(message: &str) -> Self;
fn hash_bits(&self, input_bits: &[bool]) -> Result<Self::Output, CRHError>;
fn parameters(&self) -> &Self::Parameters;
fn hash(&self, input: &[u8]) -> Result<Self::Output, CRHError> { ... }
fn hash_field_elements<F: PrimeField>(
&self,
input: &[F]
) -> Result<Self::Output, CRHError> { ... }
}