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.proof [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.proof [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] :