ouroboros-consensus-protocol-0.1.0.0: Cardano consensus protocols.
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Protocol.Ledger.HotKey

Description

Hot key

Intended for qualified import

Synopsis

KES Info

type KESEvolution = Period Source #

We call the relative periods that a KES key is valid its evolution, to avoid confusion with absolute periods.

data KESInfo Source #

Constructors

KESInfo 

Fields

  • kesStartPeriod ∷ !KESPeriod
     
  • kesEndPeriod ∷ !KESPeriod

    Currently derived from TPraosParams: > kesEndPeriod = kesStartPeriod + tpraosMaxKESEvo

  • kesEvolution ∷ !KESEvolution

    Current evolution or relative period.

    Invariant: > kesStartPeriod + kesEvolution in [kesStartPeriod, kesEndPeriod)

Instances

Instances details
Show KESInfo Source # 
Instance details

Defined in Ouroboros.Consensus.Protocol.Ledger.HotKey

Generic KESInfo Source # 
Instance details

Defined in Ouroboros.Consensus.Protocol.Ledger.HotKey

Associated Types

type Rep KESInfoTypeType Source #

Methods

fromKESInfoRep KESInfo x Source #

toRep KESInfo x → KESInfo Source #

NoThunks KESInfo Source # 
Instance details

Defined in Ouroboros.Consensus.Protocol.Ledger.HotKey

Methods

noThunks ∷ Context → KESInfoIO (Maybe ThunkInfo) #

wNoThunks ∷ Context → KESInfoIO (Maybe ThunkInfo) #

showTypeOfProxy KESInfoString #

type Rep KESInfo Source # 
Instance details

Defined in Ouroboros.Consensus.Protocol.Ledger.HotKey

type Rep KESInfo = D1 ('MetaData "KESInfo" "Ouroboros.Consensus.Protocol.Ledger.HotKey" "ouroboros-consensus-protocol-0.1.0.0-inplace" 'False) (C1 ('MetaCons "KESInfo" 'PrefixI 'True) (S1 ('MetaSel ('Just "kesStartPeriod") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 KESPeriod) :*: (S1 ('MetaSel ('Just "kesEndPeriod") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 KESPeriod) :*: S1 ('MetaSel ('Just "kesEvolution") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 KESEvolution))))

kesAbsolutePeriodKESInfo → KESPeriod Source #

Return the absolute KES period

KES Status

data KESStatus Source #

Constructors

BeforeKESStart

The given period is before the start period of the KES key.

Fields

  • KESPeriod

    Given period

  • KESPeriod

    Start period of the KES key

InKESRange KESEvolution

Relative period or evolution corresponding to the given absolute period

AfterKESEnd

The given period is after the end period of the KES key.

Fields

  • KESPeriod

    Given period

  • KESPeriod

    End period of the KES key

kesStatusKESInfo → KESPeriod → KESStatus Source #

Return the evolution of the given KES period, when it falls within the range of the HotKey ([hkStart, hkEnd)).

Note that the upper bound is exclusive, the spec says: > c0 <= kesPeriod s < c0 + MaxKESEvo

Hot Key

data HotKey c m Source #

API to interact with the key.

Constructors

HotKey 

Fields

  • evolve ∷ KESPeriod → m KESEvolutionInfo

    Evolve the KES signing key to the given absolute KES period.

    When the key cannot evolve anymore, we poison it.

  • getInfo ∷ m KESInfo

    Return KESInfo of the signing key.

  • isPoisoned ∷ m Bool

    Return True when the signing key is poisoned because it expired.

  • sign_ ∷ ∀ toSign. (KESignable c toSign, HasCallStack) ⇒ toSign → m (SignedKES c toSign)

    Sign the given toSign with the current signing key.

    PRECONDITION: the key is not poisoned.

    POSTCONDITION: the signature is in normal form.

data KESEvolutionError Source #

Failed to evolve the KES key.

Constructors

KESCouldNotEvolve KESInfo KESPeriod

The KES key could not be evolved to the target period.

KESKeyAlreadyPoisoned KESInfo KESPeriod

Target period outside the range of the current KES key. Typically the current KES period according to the wallclock slot.

type KESEvolutionInfo = UpdateInfo KESInfo KESEvolutionError Source #

Result of evolving the KES key.

mkHotKey Source #

Arguments

∷ ∀ m c. (Crypto c, IOLike m) 
⇒ SignKeyKES c 
→ KESPeriod

Start period

Word64

Max KES evolutions

→ m (HotKey c m) 

sign ∷ (KESignable c toSign, HasCallStack) ⇒ HotKey c m → toSign → m (SignedKES c toSign) Source #