| author | wenzelm | 
| Tue, 07 Nov 2006 19:40:56 +0100 | |
| changeset 21234 | fb84ab52f23b | 
| parent 20768 | 1d478c2d621f | 
| child 21404 | eb85850d3eb7 | 
| permissions | -rw-r--r-- | 
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 1 | (****************************************************************************** | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 2 | incorporating Lowe's fix (inclusion of B's identity in round 2) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 3 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 4 | date: march 2002 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 5 | author: Frederic Blanqui | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 6 | email: blanqui@lri.fr | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 7 | webpage: http://www.lri.fr/~blanqui/ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 8 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 9 | University of Cambridge, Computer Laboratory | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 10 | William Gates Building, JJ Thomson Avenue | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 11 | Cambridge CB3 0FD, United Kingdom | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 12 | ******************************************************************************) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 13 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 14 | header{*Needham-Schroeder-Lowe Public-Key Protocol*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 15 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 16 | theory Guard_NS_Public imports Guard_Public begin | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 17 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 18 | subsection{*messages used in the protocol*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 19 | |
| 20768 | 20 | abbreviation (input) | 
| 21 | ns1 :: "agent => agent => nat => event" | |
| 22 |   "ns1 A B NA == Says A B (Crypt (pubK B) {|Nonce NA, Agent A|})"
 | |
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 23 | |
| 20768 | 24 | ns1' :: "agent => agent => agent => nat => event" | 
| 25 |   "ns1' A' A B NA == Says A' B (Crypt (pubK B) {|Nonce NA, Agent A|})"
 | |
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 26 | |
| 20768 | 27 | ns2 :: "agent => agent => nat => nat => event" | 
| 28 |   "ns2 B A NA NB == Says B A (Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|})"
 | |
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 29 | |
| 20768 | 30 | ns2' :: "agent => agent => agent => nat => nat => event" | 
| 31 |   "ns2' B' B A NA NB == Says B' A (Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|})"
 | |
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 32 | |
| 20768 | 33 | ns3 :: "agent => agent => nat => event" | 
| 34 | "ns3 A B NB == Says A B (Crypt (pubK B) (Nonce NB))" | |
| 17394 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 35 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 36 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 37 | subsection{*definition of the protocol*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 38 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 39 | consts nsp :: "event list set" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 40 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 41 | inductive nsp | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 42 | intros | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 43 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 44 | Nil: "[]:nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 45 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 46 | Fake: "[| evs:nsp; X:synth (analz (spies evs)) |] ==> Says Spy B X # evs : nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 47 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 48 | NS1: "[| evs1:nsp; Nonce NA ~:used evs1 |] ==> ns1 A B NA # evs1 : nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 49 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 50 | NS2: "[| evs2:nsp; Nonce NB ~:used evs2; ns1' A' A B NA:set evs2 |] ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 51 | ns2 B A NA NB # evs2:nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 52 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 53 | NS3: "[| evs3:nsp; ns1 A B NA:set evs3; ns2' B' B A NA NB:set evs3 |] ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 54 | ns3 A B NB # evs3:nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 55 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 56 | subsection{*declarations for tactics*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 57 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 58 | declare knows_Spy_partsEs [elim] | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 59 | declare Fake_parts_insert [THEN subsetD, dest] | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 60 | declare initState.simps [simp del] | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 61 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 62 | subsection{*general properties of nsp*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 63 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 64 | lemma nsp_has_no_Gets: "evs:nsp ==> ALL A X. Gets A X ~:set evs" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 65 | by (erule nsp.induct, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 66 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 67 | lemma nsp_is_Gets_correct [iff]: "Gets_correct nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 68 | by (auto simp: Gets_correct_def dest: nsp_has_no_Gets) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 69 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 70 | lemma nsp_is_one_step [iff]: "one_step nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 71 | by (unfold one_step_def, clarify, ind_cases "ev#evs:nsp", auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 72 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 73 | lemma nsp_has_only_Says' [rule_format]: "evs:nsp ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 74 | ev:set evs --> (EX A B X. ev=Says A B X)" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 75 | by (erule nsp.induct, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 76 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 77 | lemma nsp_has_only_Says [iff]: "has_only_Says nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 78 | by (auto simp: has_only_Says_def dest: nsp_has_only_Says') | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 79 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 80 | lemma nsp_is_regular [iff]: "regular nsp" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 81 | apply (simp only: regular_def, clarify) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 82 | by (erule nsp.induct, auto simp: initState.simps knows.simps) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 83 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 84 | subsection{*nonce are used only once*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 85 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 86 | lemma NA_is_uniq [rule_format]: "evs:nsp ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 87 | Crypt (pubK B) {|Nonce NA, Agent A|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 88 | --> Crypt (pubK B') {|Nonce NA, Agent A'|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 89 | --> Nonce NA ~:analz (spies evs) --> A=A' & B=B'" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 90 | apply (erule nsp.induct, simp_all) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 91 | by (blast intro: analz_insertI)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 92 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 93 | lemma no_Nonce_NS1_NS2 [rule_format]: "evs:nsp ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 94 | Crypt (pubK B') {|Nonce NA', Nonce NA, Agent A'|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 95 | --> Crypt (pubK B) {|Nonce NA, Agent A|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 96 | --> Nonce NA:analz (spies evs)" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 97 | apply (erule nsp.induct, simp_all) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 98 | by (blast intro: analz_insertI)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 99 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 100 | lemma no_Nonce_NS1_NS2' [rule_format]: | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 101 | "[| Crypt (pubK B') {|Nonce NA', Nonce NA, Agent A'|}:parts (spies evs);
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 102 | Crypt (pubK B) {|Nonce NA, Agent A|}:parts (spies evs); evs:nsp |]
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 103 | ==> Nonce NA:analz (spies evs)" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 104 | by (rule no_Nonce_NS1_NS2, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 105 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 106 | lemma NB_is_uniq [rule_format]: "evs:nsp ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 107 | Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 108 | --> Crypt (pubK A') {|Nonce NA', Nonce NB, Agent B'|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 109 | --> Nonce NB ~:analz (spies evs) --> A=A' & B=B' & NA=NA'" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 110 | apply (erule nsp.induct, simp_all) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 111 | by (blast intro: analz_insertI)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 112 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 113 | subsection{*guardedness of NA*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 114 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 115 | lemma ns1_imp_Guard [rule_format]: "[| evs:nsp; A ~:bad; B ~:bad |] ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 116 | ns1 A B NA:set evs --> Guard NA {priK A,priK B} (spies evs)"
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 117 | apply (erule nsp.induct) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 118 | (* Nil *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 119 | apply simp_all | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 120 | (* Fake *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 121 | apply safe | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 122 | apply (erule in_synth_Guard, erule Guard_analz, simp) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 123 | (* NS1 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 124 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 125 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 126 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 127 | apply (drule Nonce_neq, simp+, rule No_Nonce, simp) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 128 | (* NS2 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 129 | apply (frule_tac A=A in Nonce_neq, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 130 | apply (case_tac "NAa=NA") | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 131 | apply (drule Guard_Nonce_analz, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 132 | apply (drule Says_imp_knows_Spy)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 133 | apply (drule_tac B=B and A'=Aa in NA_is_uniq, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 134 | (* NS3 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 135 | apply (case_tac "NB=NA", clarify) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 136 | apply (drule Guard_Nonce_analz, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 137 | apply (drule Says_imp_knows_Spy)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 138 | by (drule no_Nonce_NS1_NS2, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 139 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 140 | subsection{*guardedness of NB*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 141 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 142 | lemma ns2_imp_Guard [rule_format]: "[| evs:nsp; A ~:bad; B ~:bad |] ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 143 | ns2 B A NA NB:set evs --> Guard NB {priK A,priK B} (spies evs)" 
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 144 | apply (erule nsp.induct) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 145 | (* Nil *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 146 | apply simp_all | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 147 | (* Fake *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 148 | apply safe | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 149 | apply (erule in_synth_Guard, erule Guard_analz, simp) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 150 | (* NS1 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 151 | apply (frule Nonce_neq, simp+, blast, rule No_Nonce, simp) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 152 | (* NS2 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 153 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 154 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 155 | apply blast | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 156 | apply (frule_tac A=B and n=NB in Nonce_neq, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 157 | apply (case_tac "NAa=NB") | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 158 | apply (drule Guard_Nonce_analz, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 159 | apply (drule Says_imp_knows_Spy)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 160 | apply (drule no_Nonce_NS1_NS2, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 161 | (* NS3 *) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 162 | apply (case_tac "NBa=NB", clarify) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 163 | apply (drule Guard_Nonce_analz, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 164 | apply (drule Says_imp_knows_Spy)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 165 | by (drule_tac A=Aa and A'=A in NB_is_uniq, auto) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 166 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 167 | subsection{*Agents' Authentication*}
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 168 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 169 | lemma B_trusts_NS1: "[| evs:nsp; A ~:bad; B ~:bad |] ==> | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 170 | Crypt (pubK B) {|Nonce NA, Agent A|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 171 | --> Nonce NA ~:analz (spies evs) --> ns1 A B NA:set evs" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 172 | apply (erule nsp.induct, simp_all) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 173 | by (blast intro: analz_insertI)+ | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 174 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 175 | lemma A_trusts_NS2: "[| evs:nsp; A ~:bad; B ~:bad |] ==> ns1 A B NA:set evs | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 176 | --> Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|}:parts (spies evs)
 | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 177 | --> ns2 B A NA NB:set evs" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 178 | apply (erule nsp.induct, simp_all, safe) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 179 | apply (frule_tac B=B in ns1_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 180 | apply (drule Guard_Nonce_analz, simp+, blast) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 181 | apply (frule_tac B=B in ns1_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 182 | apply (drule Guard_Nonce_analz, simp+, blast) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 183 | apply (frule_tac B=B in ns1_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 184 | by (drule Guard_Nonce_analz, simp+, blast+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 185 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 186 | lemma B_trusts_NS3: "[| evs:nsp; A ~:bad; B ~:bad |] ==> ns2 B A NA NB:set evs | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 187 | --> Crypt (pubK B) (Nonce NB):parts (spies evs) --> ns3 A B NB:set evs" | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 188 | apply (erule nsp.induct, simp_all, safe) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 189 | apply (frule_tac B=B in ns2_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 190 | apply (drule Guard_Nonce_analz, simp+, blast) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 191 | apply (frule_tac B=B in ns2_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 192 | apply (drule Guard_Nonce_analz, simp+, blast) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 193 | apply (frule_tac B=B in ns2_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 194 | apply (drule Guard_Nonce_analz, simp+, blast, blast) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 195 | apply (frule_tac B=B in ns2_imp_Guard, simp+) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 196 | by (drule Guard_Nonce_analz, auto dest: Says_imp_knows_Spy NB_is_uniq) | 
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 197 | |
| 
a8c9ed3f9818
renamed Guard/NS_Public, Guard/OtwayRees, Guard/Yahalom.thy to avoid clash with plain Auth versions;
 wenzelm parents: diff
changeset | 198 | end |