{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Cardano.Protocol.Crypto (
Crypto (..),
StandardCrypto,
VRFVerKeyHash (..),
KeyRoleVRF (..),
hashVerKeyVRF,
) where
import Cardano.Crypto.DSIGN
import Cardano.Crypto.Hash as Hash
import qualified Cardano.Crypto.KES as KES
import qualified Cardano.Crypto.VRF as VRF
import qualified Cardano.Crypto.VRF.Praos as VRF
import Cardano.Ledger.Hashes
import Data.Kind (Type)
import Data.Typeable (Typeable)
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
class
( KES.UnsoundPureKESAlgorithm (KES c)
, VRF.VRFAlgorithm (VRF c)
, KES.ContextKES (KES c) ~ ()
, VRF.ContextVRF (VRF c) ~ ()
, Typeable c
) =>
Crypto c
where
type KES c :: Type
type VRF c :: Type
data StandardCrypto
instance Crypto StandardCrypto where
type KES StandardCrypto = KES.Sum6KES Ed25519DSIGN Blake2b_256
type VRF StandardCrypto = VRF.PraosVRF