(* Title: HOL/Auth/Guard/Guard_OtwayRees.thy Author: Frederic Blanqui, University of Cambridge Computer Laboratory Copyright 2002 University of Cambridge
*)
section\<open>Otway-Rees Protocol\<close>
theory Guard_OtwayRees imports Guard_Shared begin
subsection\<open>messages used in the protocol\<close>
abbreviation
nil :: "msg"where "nil == Number 0"
abbreviation
or1 :: "agent => agent => nat => event"where "or1 A B NA ==
Says A B \<lbrace>Nonce NA, Agent A, Agent B, Ciph A \<lbrace>Nonce NA, Agent A, Agent B\<rbrace>\<rbrace>"
abbreviation
or1' :: "agent => agent => agent => nat => msg => event" where "or1' A' A B NA X == Says A' B \Nonce NA, Agent A, Agent B, X\"
abbreviation
or2 :: "agent => agent => nat => nat => msg => event"where "or2 A B NA NB X ==
Says B Server \<lbrace>Nonce NA, Agent A, Agent B, X,
Ciph B \<lbrace>Nonce NA, Nonce NB, Agent A, Agent B\<rbrace>\<rbrace>"
abbreviation
or2' :: "agent => agent => agent => nat => nat => event" where "or2' B' A B NA NB ==
Says B' Server \Nonce NA, Agent A, Agent B,
Ciph A \<lbrace>Nonce NA, Agent A, Agent B\<rbrace>,
Ciph B \<lbrace>Nonce NA, Nonce NB, Agent A, Agent B\<rbrace>\<rbrace>"
abbreviation
or3 :: "agent => agent => nat => nat => key => event"where "or3 A B NA NB K ==
Says Server B \<lbrace>Nonce NA, Ciph A \<lbrace>Nonce NA, Key K\<rbrace>,
Ciph B \<lbrace>Nonce NB, Key K\<rbrace>\<rbrace>"
abbreviation
or3':: "agent => msg => agent => agent => nat => nat => key => event" where "or3' S Y A B NA NB K ==
Says S B \<lbrace>Nonce NA, Y, Ciph B \<lbrace>Nonce NB, Key K\<rbrace>\<rbrace>"
abbreviation
or4 :: "agent => agent => nat => msg => event"where "or4 A B NA X == Says B A \Nonce NA, X, nil\"
abbreviation
or4' :: "agent => agent => nat => key => event" where "or4' B' A NA K == Says B' A \Nonce NA, Ciph A \Nonce NA, Key K\, nil\"
subsection\<open>definition of the protocol\<close>
inductive_set or :: "event list set" where
Nil: "[] \ or"
| Fake: "\evs \ or; X \ synth (analz (spies evs))\ \ Says Spy B X # evs \ or"
| OR1: "\evs1 \ or; Nonce NA \ used evs1\ \ or1 A B NA # evs1 \ or"
| OR2: "\evs2 \ or; or1' A' A B NA X \ set evs2; Nonce NB \ used evs2\ \<Longrightarrow> or2 A B NA NB X # evs2 \<in> or"
| OR3: "\evs3 \ or; or2' B' A B NA NB \ set evs3; Key K \ used evs3\ \<Longrightarrow> or3 A B NA NB K # evs3 \<in> or"
| OR4: "\evs4 \ or; or2 A B NA NB X \ set evs4; or3' S Y A B NA NB K \ set evs4\ \<Longrightarrow> or4 A B NA X # evs4 \<in> or"