fn crh_ivk(ak: [u8; 32], nk: [u8; 32]) -> [u8; 32] {
    let hash = blake2s_simd::Params::new()
        .hash_length(32)
        .personal(b"Zcashivk")
        .to_state()
        .update(&ak[..])
        .update(&nk[..])
        .finalize();

    *hash.as_array()
}
/// Invokes Blake2s-256 as _CRH^ivk_, to derive the IncomingViewingKey
/// bytes from an AuthorizingKey and NullifierDerivingKey.
///
/// _CRH^ivk(ak, nk) := BLAKE2s-256("Zcashivk", ak || nk)_
///
/// https://zips.z.cash/protocol/protocol.pdf#concretecrhivk
Invokes Blake2s-256 as _CRH^ivk_, to derive the IncomingViewingKey
bytes from an AuthorizingKey and NullifierDerivingKey.




Invokes Blake2s - 256 as _CRH^ivk_ to derive the IncomingViewingKey bytes from an AuthorizingKey and NullifierDerivingKey .
fn crh_ivk(ak: [u8; 32], nk: [u8; 32]) -> [u8; 32] {
    let hash = blake2s_simd::Params::new()
        .hash_length(32)
        .personal(b"Zcashivk")
        .to_state()
        .update(&ak[..])
        .update(&nk[..])
        .finalize();
    *hash.as_array()
}
fn crh_ivk ( ak : [ u8 ; 32 ] , nk : [ u8 ; 32 ] ) -> [ u8 ; 32 ] { let hash = blake2s_simd :: Params :: new ( ) . hash_length ( 32 ) . personal ( b" " ) . to_state ( ) . update ( & ak [ .. ] ) . update ( & nk [ .. ] ) . finalize ( ) ; * hash . as_array ( ) }
Invokes Blake2s-256 as _CRH^ivk_, to derive the IncomingViewingKey
bytes from an AuthorizingKey and NullifierDerivingKey.
Invokes Blake2s - 256 as _CRH^ivk_ to derive the IncomingViewingKey bytes from an AuthorizingKey and NullifierDerivingKey .
ak
[u8; 32]
nk
[u8; 32]