{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Cardano.Api.OperationalCertificate
(
OperationalCertificate (..)
, OperationalCertificateIssueCounter (..)
, Shelley.KESPeriod (..)
, getHotKey
, getKesPeriod
, getOpCertCount
, AsType (..)
) where
import Cardano.Api.Any
import Cardano.Api.Key
import Cardano.Api.KeysByron
import Cardano.Api.KeysPraos
import Cardano.Api.KeysShelley
import Cardano.Api.SerialiseTextEnvelope
import qualified Cardano.Ledger.Binary as CBOR
( CBORGroup (..)
, shelleyProtVer
, toPlainDecoder
, toPlainEncoding
)
import Cardano.Protocol.Crypto (StandardCrypto)
import qualified Cardano.Protocol.TPraos.OCert as Shelley
import Data.Word
data OperationalCertificate
= OperationalCertificate
!(Shelley.OCert StandardCrypto)
!(VerificationKey StakePoolKey)
deriving (OperationalCertificate -> OperationalCertificate -> Bool
(OperationalCertificate -> OperationalCertificate -> Bool)
-> (OperationalCertificate -> OperationalCertificate -> Bool)
-> Eq OperationalCertificate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OperationalCertificate -> OperationalCertificate -> Bool
== :: OperationalCertificate -> OperationalCertificate -> Bool
$c/= :: OperationalCertificate -> OperationalCertificate -> Bool
/= :: OperationalCertificate -> OperationalCertificate -> Bool
Eq, Int -> OperationalCertificate -> ShowS
[OperationalCertificate] -> ShowS
OperationalCertificate -> String
(Int -> OperationalCertificate -> ShowS)
-> (OperationalCertificate -> String)
-> ([OperationalCertificate] -> ShowS)
-> Show OperationalCertificate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OperationalCertificate -> ShowS
showsPrec :: Int -> OperationalCertificate -> ShowS
$cshow :: OperationalCertificate -> String
show :: OperationalCertificate -> String
$cshowList :: [OperationalCertificate] -> ShowS
showList :: [OperationalCertificate] -> ShowS
Show)
deriving anyclass HasTypeProxy OperationalCertificate
HasTypeProxy OperationalCertificate =>
(OperationalCertificate -> ByteString)
-> (AsType OperationalCertificate
-> ByteString -> Either DecoderError OperationalCertificate)
-> SerialiseAsCBOR OperationalCertificate
AsType OperationalCertificate
-> ByteString -> Either DecoderError OperationalCertificate
OperationalCertificate -> ByteString
forall a.
HasTypeProxy a =>
(a -> ByteString)
-> (AsType a -> ByteString -> Either DecoderError a)
-> SerialiseAsCBOR a
$cserialiseToCBOR :: OperationalCertificate -> ByteString
serialiseToCBOR :: OperationalCertificate -> ByteString
$cdeserialiseFromCBOR :: AsType OperationalCertificate
-> ByteString -> Either DecoderError OperationalCertificate
deserialiseFromCBOR :: AsType OperationalCertificate
-> ByteString -> Either DecoderError OperationalCertificate
SerialiseAsCBOR
data OperationalCertificateIssueCounter
= OperationalCertificateIssueCounter
{ OperationalCertificateIssueCounter -> Word64
opCertIssueCount :: !Word64
, OperationalCertificateIssueCounter -> VerificationKey StakePoolKey
opCertIssueColdKey :: !(VerificationKey StakePoolKey)
}
deriving (OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool
(OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool)
-> (OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool)
-> Eq OperationalCertificateIssueCounter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool
== :: OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool
$c/= :: OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool
/= :: OperationalCertificateIssueCounter
-> OperationalCertificateIssueCounter -> Bool
Eq, Int -> OperationalCertificateIssueCounter -> ShowS
[OperationalCertificateIssueCounter] -> ShowS
OperationalCertificateIssueCounter -> String
(Int -> OperationalCertificateIssueCounter -> ShowS)
-> (OperationalCertificateIssueCounter -> String)
-> ([OperationalCertificateIssueCounter] -> ShowS)
-> Show OperationalCertificateIssueCounter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OperationalCertificateIssueCounter -> ShowS
showsPrec :: Int -> OperationalCertificateIssueCounter -> ShowS
$cshow :: OperationalCertificateIssueCounter -> String
show :: OperationalCertificateIssueCounter -> String
$cshowList :: [OperationalCertificateIssueCounter] -> ShowS
showList :: [OperationalCertificateIssueCounter] -> ShowS
Show)
deriving anyclass HasTypeProxy OperationalCertificateIssueCounter
HasTypeProxy OperationalCertificateIssueCounter =>
(OperationalCertificateIssueCounter -> ByteString)
-> (AsType OperationalCertificateIssueCounter
-> ByteString
-> Either DecoderError OperationalCertificateIssueCounter)
-> SerialiseAsCBOR OperationalCertificateIssueCounter
AsType OperationalCertificateIssueCounter
-> ByteString
-> Either DecoderError OperationalCertificateIssueCounter
OperationalCertificateIssueCounter -> ByteString
forall a.
HasTypeProxy a =>
(a -> ByteString)
-> (AsType a -> ByteString -> Either DecoderError a)
-> SerialiseAsCBOR a
$cserialiseToCBOR :: OperationalCertificateIssueCounter -> ByteString
serialiseToCBOR :: OperationalCertificateIssueCounter -> ByteString
$cdeserialiseFromCBOR :: AsType OperationalCertificateIssueCounter
-> ByteString
-> Either DecoderError OperationalCertificateIssueCounter
deserialiseFromCBOR :: AsType OperationalCertificateIssueCounter
-> ByteString
-> Either DecoderError OperationalCertificateIssueCounter
SerialiseAsCBOR
instance ToCBOR OperationalCertificate where
toCBOR :: OperationalCertificate -> Encoding
toCBOR = Version -> Encoding -> Encoding
CBOR.toPlainEncoding Version
CBOR.shelleyProtVer (Encoding -> Encoding)
-> (OperationalCertificate -> Encoding)
-> OperationalCertificate
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OperationalCertificate -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR
instance FromCBOR OperationalCertificate where
fromCBOR :: forall s. Decoder s OperationalCertificate
fromCBOR = Maybe ByteString
-> Version
-> Decoder s OperationalCertificate
-> Decoder s OperationalCertificate
forall s a.
Maybe ByteString -> Version -> Decoder s a -> Decoder s a
CBOR.toPlainDecoder Maybe ByteString
forall a. Maybe a
Nothing Version
CBOR.shelleyProtVer Decoder s OperationalCertificate
forall s. Decoder s OperationalCertificate
forall a s. DecCBOR a => Decoder s a
decCBOR
instance ToCBOR OperationalCertificateIssueCounter where
toCBOR :: OperationalCertificateIssueCounter -> Encoding
toCBOR = Version -> Encoding -> Encoding
CBOR.toPlainEncoding Version
CBOR.shelleyProtVer (Encoding -> Encoding)
-> (OperationalCertificateIssueCounter -> Encoding)
-> OperationalCertificateIssueCounter
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OperationalCertificateIssueCounter -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR
instance FromCBOR OperationalCertificateIssueCounter where
fromCBOR :: forall s. Decoder s OperationalCertificateIssueCounter
fromCBOR = Maybe ByteString
-> Version
-> Decoder s OperationalCertificateIssueCounter
-> Decoder s OperationalCertificateIssueCounter
forall s a.
Maybe ByteString -> Version -> Decoder s a -> Decoder s a
CBOR.toPlainDecoder Maybe ByteString
forall a. Maybe a
Nothing Version
CBOR.shelleyProtVer Decoder s OperationalCertificateIssueCounter
forall s. Decoder s OperationalCertificateIssueCounter
forall a s. DecCBOR a => Decoder s a
decCBOR
instance EncCBOR OperationalCertificate where
encCBOR :: OperationalCertificate -> Encoding
encCBOR (OperationalCertificate OCert StandardCrypto
ocert VerificationKey StakePoolKey
vkey) =
(CBORGroup (OCert StandardCrypto), VerificationKey StakePoolKey)
-> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (OCert StandardCrypto -> CBORGroup (OCert StandardCrypto)
forall a. a -> CBORGroup a
CBOR.CBORGroup OCert StandardCrypto
ocert, VerificationKey StakePoolKey
vkey)
instance DecCBOR OperationalCertificate where
decCBOR :: forall s. Decoder s OperationalCertificate
decCBOR = do
(CBOR.CBORGroup ocert, vkey) <- Decoder
s (CBORGroup (OCert StandardCrypto), VerificationKey StakePoolKey)
forall s.
Decoder
s (CBORGroup (OCert StandardCrypto), VerificationKey StakePoolKey)
forall a s. DecCBOR a => Decoder s a
decCBOR
return (OperationalCertificate ocert vkey)
instance EncCBOR OperationalCertificateIssueCounter where
encCBOR :: OperationalCertificateIssueCounter -> Encoding
encCBOR (OperationalCertificateIssueCounter Word64
counter VerificationKey StakePoolKey
vkey) =
(Word64, VerificationKey StakePoolKey) -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (Word64
counter, VerificationKey StakePoolKey
vkey)
instance DecCBOR OperationalCertificateIssueCounter where
decCBOR :: forall s. Decoder s OperationalCertificateIssueCounter
decCBOR = do
(counter, vkey) <- Decoder s (Word64, VerificationKey StakePoolKey)
forall s. Decoder s (Word64, VerificationKey StakePoolKey)
forall a s. DecCBOR a => Decoder s a
decCBOR
return (OperationalCertificateIssueCounter counter vkey)
instance HasTypeProxy OperationalCertificate where
data AsType OperationalCertificate = AsOperationalCertificate
proxyToAsType :: Proxy OperationalCertificate -> AsType OperationalCertificate
proxyToAsType Proxy OperationalCertificate
_ = AsType OperationalCertificate
AsOperationalCertificate
instance HasTypeProxy OperationalCertificateIssueCounter where
data AsType OperationalCertificateIssueCounter = AsOperationalCertificateIssueCounter
proxyToAsType :: Proxy OperationalCertificateIssueCounter
-> AsType OperationalCertificateIssueCounter
proxyToAsType Proxy OperationalCertificateIssueCounter
_ = AsType OperationalCertificateIssueCounter
AsOperationalCertificateIssueCounter
instance HasTextEnvelope OperationalCertificate where
textEnvelopeType :: AsType OperationalCertificate -> TextEnvelopeType
textEnvelopeType AsType OperationalCertificate
_ = TextEnvelopeType
"NodeOperationalCertificate"
getHotKey :: OperationalCertificate -> VerificationKey KesKey
getHotKey :: OperationalCertificate -> VerificationKey KesKey
getHotKey (OperationalCertificate OCert StandardCrypto
cert VerificationKey StakePoolKey
_) = VerKeyKES (KES StandardCrypto) -> VerificationKey KesKey
KesVerificationKey (VerKeyKES (KES StandardCrypto) -> VerificationKey KesKey)
-> VerKeyKES (KES StandardCrypto) -> VerificationKey KesKey
forall a b. (a -> b) -> a -> b
$ OCert StandardCrypto -> VerKeyKES (KES StandardCrypto)
forall c. OCert c -> VerKeyKES (KES c)
Shelley.ocertVkHot OCert StandardCrypto
cert
getKesPeriod :: OperationalCertificate -> Word
getKesPeriod :: OperationalCertificate -> Word
getKesPeriod (OperationalCertificate OCert StandardCrypto
cert VerificationKey StakePoolKey
_) = KESPeriod -> Word
Shelley.unKESPeriod (KESPeriod -> Word) -> KESPeriod -> Word
forall a b. (a -> b) -> a -> b
$ OCert StandardCrypto -> KESPeriod
forall c. OCert c -> KESPeriod
Shelley.ocertKESPeriod OCert StandardCrypto
cert
getOpCertCount :: OperationalCertificate -> Word64
getOpCertCount :: OperationalCertificate -> Word64
getOpCertCount (OperationalCertificate OCert StandardCrypto
cert VerificationKey StakePoolKey
_) = OCert StandardCrypto -> Word64
forall c. OCert c -> Word64
Shelley.ocertN OCert StandardCrypto
cert