Equations
- DY.Network.baseAttackerKnowledge = { attackerKnows := fun (x : DY.ExecTrace) (entry : DY.Network.ExecEntryT) (msg : DY.Bytes) => msg = entry.msg }
Instances For
def
DY.Network.sendMessage
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has ExecEntryT]
(msg : Bytes)
:
Equations
- DY.Network.sendMessage msg = DY.appendEntry { msg := msg }
Instances For
def
DY.Network.receiveMessage
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has ExecEntryT]
(handle : Nat)
:
Equations
- DY.Network.receiveMessage handle = do let msg ← DY.getEntry handle pure msg.msg
Instances For
def
DY.Trace.MessageSentAt
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has Network.ExecEntryT]
(tr : ExecTrace)
(b : Bytes)
(i : Nat)
:
Equations
- DY.Trace.MessageSentAt tr b i = (DY.Trace.at? tr i = some { msg := b })
Instances For
def
DY.Trace.MessageSent
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has Network.ExecEntryT]
(tr : ExecTrace)
(b : Bytes)
:
Equations
- DY.Trace.MessageSent tr b = ∃ (i : Nat), DY.Trace.MessageSentAt tr b i
Instances For
def
DY.Trace.getMessageSentAt
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has Network.ExecEntryT]
(i : Nat)
(tr : ExecTrace)
:
Equations
- DY.Trace.getMessageSentAt i tr = match DY.Trace.at? tr i with | none => none | some entry => some entry.msg
Instances For
theorem
DY.Trace.MessageSentAt_eq_getMessageSentAt
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has Network.ExecEntryT]
(msg : Bytes)
(i : Nat)
(tr : ExecTrace)
:
theorem
DY.Trace.MessageSentAt_implies_AttackerKnows
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has Network.ExecEntryT]
[BaseAttackerKnowledge]
[AttackerKnowledge]
[BaseAttackerKnowledge.Has Network.baseAttackerKnowledge]
(tr : ExecTrace)
(b : Bytes)
(i : Nat)
:
MessageSentAt tr b i → b.AttackerKnows tr
@[reducible, inline]
Equations
Instances For
@[instance_reducible]
instance
DY.Network.instSubTraceInvariantExecEntryTProofEntryTOfBytesInvariants
[BytesFunctor]
[ExecTraceTypes]
[ProofTraceTypes]
[BytesInvariants]
:
Equations
- DY.Network.instSubTraceInvariantExecEntryTProofEntryTOfBytesInvariants = { invariant := fun (tr : DY.ProofTrace) (entry : DY.Network.ProofEntryT) => entry.msg.Publishable tr }
instance
DY.Network.sendMessage.spec
[BytesFunctor]
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[BytesInvariants]
[BytesInvariantsProofs]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
[TraceInvariant.Has ProofEntryT]
(msg : Bytes)
:
HoareTriple (sendMessage msg) (fun (tr : ProofTrace) => msg.Publishable tr) fun (x : Nat) (x_1 : ProofTrace) => True
instance
DY.Network.receiveMessage.spec
[BytesFunctor]
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[BytesInvariants]
[BytesInvariantsProofs]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
[TraceInvariant.Has ProofEntryT]
(handle : Nat)
:
HoareTriple (receiveMessage handle) (fun (x : ProofTrace) => True) fun (msg : Bytes) (tr : ProofTrace) =>
msg.Publishable tr
@[reducible, inline]
abbrev
DY.Network.reachability
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has ExecEntryT]
[BaseAttackerKnowledge]
[AttackerKnowledge]
:
Equations
- DY.Network.reachability = { Input := DY.Bytes, PreCond := fun (b : DY.Bytes) (tr : DY.ExecTrace) => b.AttackerKnows tr, step := fun (b : DY.Bytes) => ⟨Nat, DY.Network.sendMessage b⟩ }
Instances For
theorem
DY.Network.receiveMessage.preservesReachability
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has ExecEntryT]
[BaseAttackerKnowledge]
[AttackerKnowledge]
[BaseAttackerKnowledge.Has baseAttackerKnowledge]
(config : ReachabilityConfig)
(msgHandle : Nat)
:
Traceful.PreservesReachability config (receiveMessage msgHandle) (fun (x : ExecTrace) => True)
fun (msg : Bytes) (tr : ExecTrace) => msg.AttackerKnows tr
instance
DY.Network.instReachableImpliesInvariantReachability
[BytesFunctor]
[ExecTraceTypes]
[ExecTraceTypes.Has ExecEntryT]
[BaseAttackerKnowledge]
[AttackerKnowledge]
[ProofTraceTypes]
[TraceInvariant]
[BytesInvariants]
[BytesInvariantsProofs]
[ProofTraceTypes.Has ProofEntryT]
[TraceInvariant.Has ProofEntryT]
[BaseAttackerKnowledgeTheorem]
[AttackerKnowledgeTheorem]
: