{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}

-- | Package all the crypto constraints into one place.
module Cardano.Protocol.Crypto (
  Crypto (..),
  StandardCrypto,
  VRFVerKeyHash (..),
  KeyRoleVRF (..),
  hashVerKeyVRF,
) where

import Cardano.Crypto.Hash as Hash
import qualified Cardano.Crypto.VRF as VRF
import Cardano.Ledger.Crypto.Internal
import Cardano.Ledger.Hashes

hashVerKeyVRF :: Crypto c => VRF.VerKeyVRF (VRF c) -> VRFVerKeyHash (r :: KeyRoleVRF)
hashVerKeyVRF :: forall c (r :: KeyRoleVRF).
Crypto c =>
VerKeyVRF (VRF c) -> VRFVerKeyHash r
hashVerKeyVRF = Hash HASH KeyRoleVRF -> VRFVerKeyHash r
forall (r :: KeyRoleVRF). Hash HASH KeyRoleVRF -> VRFVerKeyHash r
VRFVerKeyHash (Hash HASH KeyRoleVRF -> VRFVerKeyHash r)
-> (VerKeyVRF (VRF c) -> Hash HASH KeyRoleVRF)
-> VerKeyVRF (VRF c)
-> VRFVerKeyHash r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Hash HASH (VerKeyVRF (VRF c)) -> Hash HASH KeyRoleVRF
forall h a b. Hash h a -> Hash h b
Hash.castHash (Hash HASH (VerKeyVRF (VRF c)) -> Hash HASH KeyRoleVRF)
-> (VerKeyVRF (VRF c) -> Hash HASH (VerKeyVRF (VRF c)))
-> VerKeyVRF (VRF c)
-> Hash HASH KeyRoleVRF
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VerKeyVRF (VRF c) -> Hash HASH (VerKeyVRF (VRF c))
forall h.
HashAlgorithm h =>
VerKeyVRF (VRF c) -> Hash h (VerKeyVRF (VRF c))
forall v h.
(VRFAlgorithm v, HashAlgorithm h) =>
VerKeyVRF v -> Hash h (VerKeyVRF v)
VRF.hashVerKeyVRF