{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Cardano.Crypto.VRF.Mock (
MockVRF,
VerKeyVRF (..),
SignKeyVRF (..),
)
where
import Cardano.Binary.FixedSizeCodec (
FixedSizeCodec (..),
decodeFixedSized,
encodeFixedSized,
guardFixedSized,
)
import Control.DeepSeq (NFData)
import Data.Proxy (Proxy (..))
import Data.Word (Word64)
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks)
import Cardano.Binary (FromCBOR (..), ToCBOR (..))
import Cardano.Crypto.Hash
import Cardano.Crypto.Seed
import Cardano.Crypto.Util
import Cardano.Crypto.VRF.Class
data MockVRF
instance VRFAlgorithm MockVRF where
newtype VerKeyVRF MockVRF = VerKeyMockVRF Word64
deriving (Int -> VerKeyVRF MockVRF -> ShowS
[VerKeyVRF MockVRF] -> ShowS
VerKeyVRF MockVRF -> String
(Int -> VerKeyVRF MockVRF -> ShowS)
-> (VerKeyVRF MockVRF -> String)
-> ([VerKeyVRF MockVRF] -> ShowS)
-> Show (VerKeyVRF MockVRF)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VerKeyVRF MockVRF -> ShowS
showsPrec :: Int -> VerKeyVRF MockVRF -> ShowS
$cshow :: VerKeyVRF MockVRF -> String
show :: VerKeyVRF MockVRF -> String
$cshowList :: [VerKeyVRF MockVRF] -> ShowS
showList :: [VerKeyVRF MockVRF] -> ShowS
Show, VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
(VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> Eq (VerKeyVRF MockVRF)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
== :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
$c/= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
/= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
Eq, Eq (VerKeyVRF MockVRF)
Eq (VerKeyVRF MockVRF) =>
(VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Ordering)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF)
-> (VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF)
-> Ord (VerKeyVRF MockVRF)
VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Ordering
VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Ordering
compare :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Ordering
$c< :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
< :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
$c<= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
<= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
$c> :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
> :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
$c>= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
>= :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> Bool
$cmax :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF
max :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF
$cmin :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF
min :: VerKeyVRF MockVRF -> VerKeyVRF MockVRF -> VerKeyVRF MockVRF
Ord, (forall x. VerKeyVRF MockVRF -> Rep (VerKeyVRF MockVRF) x)
-> (forall x. Rep (VerKeyVRF MockVRF) x -> VerKeyVRF MockVRF)
-> Generic (VerKeyVRF MockVRF)
forall x. Rep (VerKeyVRF MockVRF) x -> VerKeyVRF MockVRF
forall x. VerKeyVRF MockVRF -> Rep (VerKeyVRF MockVRF) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. VerKeyVRF MockVRF -> Rep (VerKeyVRF MockVRF) x
from :: forall x. VerKeyVRF MockVRF -> Rep (VerKeyVRF MockVRF) x
$cto :: forall x. Rep (VerKeyVRF MockVRF) x -> VerKeyVRF MockVRF
to :: forall x. Rep (VerKeyVRF MockVRF) x -> VerKeyVRF MockVRF
Generic, Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo)
Proxy (VerKeyVRF MockVRF) -> String
(Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Proxy (VerKeyVRF MockVRF) -> String)
-> NoThunks (VerKeyVRF MockVRF)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo)
noThunks :: Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> VerKeyVRF MockVRF -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (VerKeyVRF MockVRF) -> String
showTypeOf :: Proxy (VerKeyVRF MockVRF) -> String
NoThunks, VerKeyVRF MockVRF -> ()
(VerKeyVRF MockVRF -> ()) -> NFData (VerKeyVRF MockVRF)
forall a. (a -> ()) -> NFData a
$crnf :: VerKeyVRF MockVRF -> ()
rnf :: VerKeyVRF MockVRF -> ()
NFData)
newtype SignKeyVRF MockVRF = SignKeyMockVRF Word64
deriving (Int -> SignKeyVRF MockVRF -> ShowS
[SignKeyVRF MockVRF] -> ShowS
SignKeyVRF MockVRF -> String
(Int -> SignKeyVRF MockVRF -> ShowS)
-> (SignKeyVRF MockVRF -> String)
-> ([SignKeyVRF MockVRF] -> ShowS)
-> Show (SignKeyVRF MockVRF)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SignKeyVRF MockVRF -> ShowS
showsPrec :: Int -> SignKeyVRF MockVRF -> ShowS
$cshow :: SignKeyVRF MockVRF -> String
show :: SignKeyVRF MockVRF -> String
$cshowList :: [SignKeyVRF MockVRF] -> ShowS
showList :: [SignKeyVRF MockVRF] -> ShowS
Show, SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
(SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> Eq (SignKeyVRF MockVRF)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
== :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
$c/= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
/= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
Eq, Eq (SignKeyVRF MockVRF)
Eq (SignKeyVRF MockVRF) =>
(SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Ordering)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF)
-> (SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF)
-> Ord (SignKeyVRF MockVRF)
SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Ordering
SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Ordering
compare :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Ordering
$c< :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
< :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
$c<= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
<= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
$c> :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
> :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
$c>= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
>= :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> Bool
$cmax :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF
max :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF
$cmin :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF
min :: SignKeyVRF MockVRF -> SignKeyVRF MockVRF -> SignKeyVRF MockVRF
Ord, (forall x. SignKeyVRF MockVRF -> Rep (SignKeyVRF MockVRF) x)
-> (forall x. Rep (SignKeyVRF MockVRF) x -> SignKeyVRF MockVRF)
-> Generic (SignKeyVRF MockVRF)
forall x. Rep (SignKeyVRF MockVRF) x -> SignKeyVRF MockVRF
forall x. SignKeyVRF MockVRF -> Rep (SignKeyVRF MockVRF) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SignKeyVRF MockVRF -> Rep (SignKeyVRF MockVRF) x
from :: forall x. SignKeyVRF MockVRF -> Rep (SignKeyVRF MockVRF) x
$cto :: forall x. Rep (SignKeyVRF MockVRF) x -> SignKeyVRF MockVRF
to :: forall x. Rep (SignKeyVRF MockVRF) x -> SignKeyVRF MockVRF
Generic, Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo)
Proxy (SignKeyVRF MockVRF) -> String
(Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Proxy (SignKeyVRF MockVRF) -> String)
-> NoThunks (SignKeyVRF MockVRF)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo)
noThunks :: Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> SignKeyVRF MockVRF -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (SignKeyVRF MockVRF) -> String
showTypeOf :: Proxy (SignKeyVRF MockVRF) -> String
NoThunks, SignKeyVRF MockVRF -> ()
(SignKeyVRF MockVRF -> ()) -> NFData (SignKeyVRF MockVRF)
forall a. (a -> ()) -> NFData a
$crnf :: SignKeyVRF MockVRF -> ()
rnf :: SignKeyVRF MockVRF -> ()
NFData)
newtype CertVRF MockVRF = CertMockVRF Word64
deriving (Int -> CertVRF MockVRF -> ShowS
[CertVRF MockVRF] -> ShowS
CertVRF MockVRF -> String
(Int -> CertVRF MockVRF -> ShowS)
-> (CertVRF MockVRF -> String)
-> ([CertVRF MockVRF] -> ShowS)
-> Show (CertVRF MockVRF)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CertVRF MockVRF -> ShowS
showsPrec :: Int -> CertVRF MockVRF -> ShowS
$cshow :: CertVRF MockVRF -> String
show :: CertVRF MockVRF -> String
$cshowList :: [CertVRF MockVRF] -> ShowS
showList :: [CertVRF MockVRF] -> ShowS
Show, CertVRF MockVRF -> CertVRF MockVRF -> Bool
(CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> (CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> Eq (CertVRF MockVRF)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
== :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
$c/= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
/= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
Eq, Eq (CertVRF MockVRF)
Eq (CertVRF MockVRF) =>
(CertVRF MockVRF -> CertVRF MockVRF -> Ordering)
-> (CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> (CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> (CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> (CertVRF MockVRF -> CertVRF MockVRF -> Bool)
-> (CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF)
-> (CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF)
-> Ord (CertVRF MockVRF)
CertVRF MockVRF -> CertVRF MockVRF -> Bool
CertVRF MockVRF -> CertVRF MockVRF -> Ordering
CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CertVRF MockVRF -> CertVRF MockVRF -> Ordering
compare :: CertVRF MockVRF -> CertVRF MockVRF -> Ordering
$c< :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
< :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
$c<= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
<= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
$c> :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
> :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
$c>= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
>= :: CertVRF MockVRF -> CertVRF MockVRF -> Bool
$cmax :: CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF
max :: CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF
$cmin :: CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF
min :: CertVRF MockVRF -> CertVRF MockVRF -> CertVRF MockVRF
Ord, (forall x. CertVRF MockVRF -> Rep (CertVRF MockVRF) x)
-> (forall x. Rep (CertVRF MockVRF) x -> CertVRF MockVRF)
-> Generic (CertVRF MockVRF)
forall x. Rep (CertVRF MockVRF) x -> CertVRF MockVRF
forall x. CertVRF MockVRF -> Rep (CertVRF MockVRF) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CertVRF MockVRF -> Rep (CertVRF MockVRF) x
from :: forall x. CertVRF MockVRF -> Rep (CertVRF MockVRF) x
$cto :: forall x. Rep (CertVRF MockVRF) x -> CertVRF MockVRF
to :: forall x. Rep (CertVRF MockVRF) x -> CertVRF MockVRF
Generic, Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo)
Proxy (CertVRF MockVRF) -> String
(Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo))
-> (Proxy (CertVRF MockVRF) -> String)
-> NoThunks (CertVRF MockVRF)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo)
noThunks :: Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> CertVRF MockVRF -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (CertVRF MockVRF) -> String
showTypeOf :: Proxy (CertVRF MockVRF) -> String
NoThunks, CertVRF MockVRF -> ()
(CertVRF MockVRF -> ()) -> NFData (CertVRF MockVRF)
forall a. (a -> ()) -> NFData a
$crnf :: CertVRF MockVRF -> ()
rnf :: CertVRF MockVRF -> ()
NFData)
algorithmNameVRF :: forall (proxy :: * -> *). proxy MockVRF -> String
algorithmNameVRF proxy MockVRF
_ = String
"mock"
deriveVerKeyVRF :: SignKeyVRF MockVRF -> VerKeyVRF MockVRF
deriveVerKeyVRF (SignKeyMockVRF Word64
n) = Word64 -> VerKeyVRF MockVRF
VerKeyMockVRF Word64
n
type Signable MockVRF = SignableRepresentation
evalVRF :: forall a.
(HasCallStack, Signable MockVRF a) =>
ContextVRF MockVRF
-> a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
evalVRF () a
a SignKeyVRF MockVRF
sk = a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
forall a.
SignableRepresentation a =>
a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
evalVRF' a
a SignKeyVRF MockVRF
sk
verifyVRF :: forall a.
(HasCallStack, Signable MockVRF a) =>
ContextVRF MockVRF
-> VerKeyVRF MockVRF
-> a
-> CertVRF MockVRF
-> Maybe (OutputVRF MockVRF)
verifyVRF () (VerKeyMockVRF Word64
n) a
a CertVRF MockVRF
c
| CertVRF MockVRF
c CertVRF MockVRF -> CertVRF MockVRF -> Bool
forall a. Eq a => a -> a -> Bool
== CertVRF MockVRF
c' = OutputVRF MockVRF -> Maybe (OutputVRF MockVRF)
forall a. a -> Maybe a
Just OutputVRF MockVRF
o
| Bool
otherwise = Maybe (OutputVRF MockVRF)
forall a. Maybe a
Nothing
where
(OutputVRF MockVRF
o, CertVRF MockVRF
c') = a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
forall a.
SignableRepresentation a =>
a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
evalVRF' a
a (Word64 -> SignKeyVRF MockVRF
SignKeyMockVRF Word64
n)
sizeOutputVRF :: forall (proxy :: * -> *). proxy MockVRF -> Word
sizeOutputVRF proxy MockVRF
_ = Proxy ShortHash -> Word
forall h (proxy :: * -> *). HashAlgorithm h => proxy h -> Word
hashSize (Proxy ShortHash
forall {k} (t :: k). Proxy t
Proxy :: Proxy ShortHash)
seedSizeVRF :: forall (proxy :: * -> *). proxy MockVRF -> Word
seedSizeVRF proxy MockVRF
_ = Word
8
genKeyVRF :: Seed -> SignKeyVRF MockVRF
genKeyVRF Seed
seed = Word64 -> SignKeyVRF MockVRF
SignKeyMockVRF Word64
sk
where
sk :: Word64
sk = Seed -> (forall (m :: * -> *). MonadRandom m => m Word64) -> Word64
forall a. Seed -> (forall (m :: * -> *). MonadRandom m => m a) -> a
runMonadRandomWithSeed Seed
seed m Word64
forall (m :: * -> *). MonadRandom m => m Word64
getRandomWord64
instance ToCBOR (VerKeyVRF MockVRF) where
toCBOR :: VerKeyVRF MockVRF -> Encoding
toCBOR = VerKeyVRF MockVRF -> Encoding
forall a. FixedSizeCodec a => a -> Encoding
encodeFixedSized
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (VerKeyVRF MockVRF) -> Size
encodedSizeExpr forall t. ToCBOR t => Proxy t -> Size
_size = Proxy (VerKeyVRF MockVRF) -> Size
forall v. VRFAlgorithm v => Proxy (VerKeyVRF v) -> Size
encodedVerKeyVRFSizeExpr
instance FromCBOR (VerKeyVRF MockVRF) where
fromCBOR :: forall s. Decoder s (VerKeyVRF MockVRF)
fromCBOR = Decoder s (VerKeyVRF MockVRF)
forall a s. FixedSizeCodec a => Decoder s a
decodeFixedSized
instance ToCBOR (SignKeyVRF MockVRF) where
toCBOR :: SignKeyVRF MockVRF -> Encoding
toCBOR = SignKeyVRF MockVRF -> Encoding
forall a. FixedSizeCodec a => a -> Encoding
encodeFixedSized
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (SignKeyVRF MockVRF) -> Size
encodedSizeExpr forall t. ToCBOR t => Proxy t -> Size
_size = Proxy (SignKeyVRF MockVRF) -> Size
forall v. VRFAlgorithm v => Proxy (SignKeyVRF v) -> Size
encodedSignKeyVRFSizeExpr
instance FromCBOR (SignKeyVRF MockVRF) where
fromCBOR :: forall s. Decoder s (SignKeyVRF MockVRF)
fromCBOR = Decoder s (SignKeyVRF MockVRF)
forall a s. FixedSizeCodec a => Decoder s a
decodeFixedSized
instance ToCBOR (CertVRF MockVRF) where
toCBOR :: CertVRF MockVRF -> Encoding
toCBOR = CertVRF MockVRF -> Encoding
forall a. FixedSizeCodec a => a -> Encoding
encodeFixedSized
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (CertVRF MockVRF) -> Size
encodedSizeExpr forall t. ToCBOR t => Proxy t -> Size
_size = Proxy (CertVRF MockVRF) -> Size
forall v. VRFAlgorithm v => Proxy (CertVRF v) -> Size
encodedCertVRFSizeExpr
instance FromCBOR (CertVRF MockVRF) where
fromCBOR :: forall s. Decoder s (CertVRF MockVRF)
fromCBOR = Decoder s (CertVRF MockVRF)
forall a s. FixedSizeCodec a => Decoder s a
decodeFixedSized
instance FixedSizeCodec (VerKeyVRF MockVRF) where
type FixedSize (VerKeyVRF MockVRF) = 8
rawEncodeFixedSized :: VerKeyVRF MockVRF -> ByteString
rawEncodeFixedSized (VerKeyMockVRF Word64
k) = Word64 -> ByteString
writeBinaryWord64 Word64
k
rawDecodeFixedSized :: forall (m :: * -> *).
MonadFail m =>
ByteString -> m (VerKeyVRF MockVRF)
rawDecodeFixedSized ByteString
bs = ByteString -> m (VerKeyVRF MockVRF) -> m (VerKeyVRF MockVRF)
forall a (m :: * -> *).
(FixedSizeCodec a, MonadFail m, Typeable a) =>
ByteString -> m a -> m a
guardFixedSized ByteString
bs (m (VerKeyVRF MockVRF) -> m (VerKeyVRF MockVRF))
-> m (VerKeyVRF MockVRF) -> m (VerKeyVRF MockVRF)
forall a b. (a -> b) -> a -> b
$ VerKeyVRF MockVRF -> m (VerKeyVRF MockVRF)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (VerKeyVRF MockVRF -> m (VerKeyVRF MockVRF))
-> VerKeyVRF MockVRF -> m (VerKeyVRF MockVRF)
forall a b. (a -> b) -> a -> b
$! Word64 -> VerKeyVRF MockVRF
VerKeyMockVRF (ByteString -> Word64
readBinaryWord64 ByteString
bs)
{-# INLINE rawDecodeFixedSized #-}
instance FixedSizeCodec (SignKeyVRF MockVRF) where
type FixedSize (SignKeyVRF MockVRF) = 8
rawEncodeFixedSized :: SignKeyVRF MockVRF -> ByteString
rawEncodeFixedSized (SignKeyMockVRF Word64
k) = Word64 -> ByteString
writeBinaryWord64 Word64
k
rawDecodeFixedSized :: forall (m :: * -> *).
MonadFail m =>
ByteString -> m (SignKeyVRF MockVRF)
rawDecodeFixedSized ByteString
bs = ByteString -> m (SignKeyVRF MockVRF) -> m (SignKeyVRF MockVRF)
forall a (m :: * -> *).
(FixedSizeCodec a, MonadFail m, Typeable a) =>
ByteString -> m a -> m a
guardFixedSized ByteString
bs (m (SignKeyVRF MockVRF) -> m (SignKeyVRF MockVRF))
-> m (SignKeyVRF MockVRF) -> m (SignKeyVRF MockVRF)
forall a b. (a -> b) -> a -> b
$ SignKeyVRF MockVRF -> m (SignKeyVRF MockVRF)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SignKeyVRF MockVRF -> m (SignKeyVRF MockVRF))
-> SignKeyVRF MockVRF -> m (SignKeyVRF MockVRF)
forall a b. (a -> b) -> a -> b
$! Word64 -> SignKeyVRF MockVRF
SignKeyMockVRF (ByteString -> Word64
readBinaryWord64 ByteString
bs)
{-# INLINE rawDecodeFixedSized #-}
instance FixedSizeCodec (CertVRF MockVRF) where
type FixedSize (CertVRF MockVRF) = 8
rawEncodeFixedSized :: CertVRF MockVRF -> ByteString
rawEncodeFixedSized (CertMockVRF Word64
k) = Word64 -> ByteString
writeBinaryWord64 Word64
k
rawDecodeFixedSized :: forall (m :: * -> *).
MonadFail m =>
ByteString -> m (CertVRF MockVRF)
rawDecodeFixedSized ByteString
bs = ByteString -> m (CertVRF MockVRF) -> m (CertVRF MockVRF)
forall a (m :: * -> *).
(FixedSizeCodec a, MonadFail m, Typeable a) =>
ByteString -> m a -> m a
guardFixedSized ByteString
bs (m (CertVRF MockVRF) -> m (CertVRF MockVRF))
-> m (CertVRF MockVRF) -> m (CertVRF MockVRF)
forall a b. (a -> b) -> a -> b
$ CertVRF MockVRF -> m (CertVRF MockVRF)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CertVRF MockVRF -> m (CertVRF MockVRF))
-> CertVRF MockVRF -> m (CertVRF MockVRF)
forall a b. (a -> b) -> a -> b
$! Word64 -> CertVRF MockVRF
CertMockVRF (ByteString -> Word64
readBinaryWord64 ByteString
bs)
{-# INLINE rawDecodeFixedSized #-}
evalVRF' ::
SignableRepresentation a =>
a ->
SignKeyVRF MockVRF ->
(OutputVRF MockVRF, CertVRF MockVRF)
evalVRF' :: forall a.
SignableRepresentation a =>
a -> SignKeyVRF MockVRF -> (OutputVRF MockVRF, CertVRF MockVRF)
evalVRF' a
a sk :: SignKeyVRF MockVRF
sk@(SignKeyMockVRF Word64
n) =
let y :: ByteArray
y =
Hash ShortHash Encoding -> ByteArray
forall h a. Hash h a -> ByteArray
hashToByteArray (Hash ShortHash Encoding -> ByteArray)
-> Hash ShortHash Encoding -> ByteArray
forall a b. (a -> b) -> a -> b
$
forall h a. HashAlgorithm h => (a -> Encoding) -> a -> Hash h a
hashWithSerialiser @ShortHash Encoding -> Encoding
forall a. a -> a
id (Encoding -> Hash ShortHash Encoding)
-> Encoding -> Hash ShortHash Encoding
forall a b. (a -> b) -> a -> b
$
ByteString -> Encoding
forall a. ToCBOR a => a -> Encoding
toCBOR (a -> ByteString
forall a. SignableRepresentation a => a -> ByteString
getSignableRepresentation a
a) Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> SignKeyVRF MockVRF -> Encoding
forall a. ToCBOR a => a -> Encoding
toCBOR SignKeyVRF MockVRF
sk
in (ByteArray -> OutputVRF MockVRF
forall v. ByteArray -> OutputVRF v
OutputVRF ByteArray
y, Word64 -> CertVRF MockVRF
CertMockVRF Word64
n)