scyther-proof 0.5.0.0 → 0.6.0.0
raw patch · 45 files changed
+20327/−18884 lines, 45 files
Files
- CHANGES +5/−0
- README.md +44/−26
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy +3509/−3209
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy +2018/−1838
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy +3174/−2768
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy +211/−151
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy +196/−136
- data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy +3997/−3697
- data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy +2365/−2185
- data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy +3721/−3315
- data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy +211/−151
- data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy +196/−136
- data/isabelle/AUTHORS +5/−1
- data/isabelle/IsaMakefile +0/−31
- data/isabelle/Makefile +2/−3
- data/isabelle/README +44/−26
- data/isabelle/ROOT +2/−0
- data/isabelle/ROOT.ML +0/−1
- data/isabelle/src/ESPLogic/Automation.thy +5/−233
- data/isabelle/src/ESPLogic/Capabilities.thy +20/−20
- data/isabelle/src/ESPLogic/DistinctList.thy +2/−2
- data/isabelle/src/ESPLogic/ExecMessage.thy +3/−3
- data/isabelle/src/ESPLogic/ExplicitModel.thy +127/−131
- data/isabelle/src/ESPLogic/HOL_ext.thy +4/−4
- data/isabelle/src/ESPLogic/Hints.thy +3/−2
- data/isabelle/src/ESPLogic/InferenceRules.thy +29/−29
- data/isabelle/src/ESPLogic/Protocol.thy +10/−10
- data/isabelle/src/ESPLogic/Syntax.thy +1/−1
- data/isabelle/src/ESPLogic/Unify.thy +20/−332
- data/isabelle/src/ESPLogic/WeakTyping.thy +15/−15
- data/isabelle/src/ESPLogic/espl_definitions.ML +40/−46
- data/isabelle/src/ESPLogic/espl_methods.ML +13/−15
- data/isabelle/src/ESPLogic/espl_utils.ML +5/−5
- data/isabelle/src/compromising_adversaries/CR_paper_acm.thy +34/−34
- data/isabelle/src/compromising_adversaries/NS_Public_acm.thy +15/−15
- data/isabelle/src/compromising_adversaries/PFS_acm.thy +13/−13
- data/isabelle/src/compromising_adversaries/TLS_acm.thy +15/−15
- data/isabelle/src/compromising_adversaries/wPFS_acm.thy +13/−13
- data/isabelle/src/isar-keywords.el +150/−91
- interactive-only-src/Paths_scyther_proof.hs +1/−1
- scyther-proof.cabal +16/−15
- src/Main.hs +29/−60
- src/Scyther/Theory/Html.hs +8/−15
- src/Scyther/Theory/Pretty.hs +7/−7
- src/System/Isabelle.hs +29/−83
CHANGES view
@@ -1,3 +1,8 @@+* 0.6.0.0+ - ported to Isabelle-2013 by Andreas Lochbihler+ - removed buggy isabelle timout support+ - tested compilation on GHC 7.4.2+ * 0.5.0.0 - implemented proof generation for injective agreement - fixed bug in unification of inverse-key constructors
README.md view
@@ -1,10 +1,9 @@ README: The scyther-proof security protocol verification tool ============================================================= -Author: Simon Meier <simon.meier@inf.ethz.ch>--Creation Date: 13/05/2011 -- Last Updated: 28/06/2012-+Authors: Simon Meier <iridcode@gmail.com>+Creation Date: 2011-05-13+Last Updated: 2013-02-27 by Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch> 1. Introduction ===============@@ -56,42 +55,48 @@ 2.2 Installing the Isabelle/HOL theories ---------------------------------------- -Download and install full Isabelle2009-1 according to the installation+Download and install full Isabelle2013 according to the installation instructions at - http://isabelle.in.tum.de/website-Isabelle2009-1/download_x86-linux.html+ http://isabelle.in.tum.de/website-Isabelle2013/download_x86-linux.html The first time you call `scyther-proof` with the `--isabelle` flag it will build the logic image of the Isabelle/HOL theories formalizing the security protocol verification theory underlying `scyther-proof`. -For enabling interactive processing of theory files based using our-extensions to Isabelle's ISAR proof language use one of the following two-variants.+If you wish to use ProofGeneral to interactively process the theory files+using our extensions to Isabelle's ISAR proof language, use one of the+following two variants. This is needed in order to make the new ISAR keywords+`role`, `protocol`, `sources`, and `prefix_close` available in the Emacs+frontend. If you are using the Isabelle/jEdit Prover IDE, the keywords are+automatically registered. + Variant a: Brute Force ---------------------- -Overwrite the standard Emacs keywords file+Copy the Emacs keywords file provided with the ESPL distribution at - $ISABELLE_HOME/etc/isar-keywords.el+ $SCYTHER_PROOF_HOME/data/isabelle/src/isar-keywords.el -with the Emacs keywords file provided with the ESPL distribution.+to your local Isabelle configuration in - $SCYTHER_PROOF_HOME/isabelle/src/isar-keywords.el+ $ISABELLE_HOME_USER/etc -This is needed in order to make the new ISAR keywords `role`,-`protocol`, `sources`, and `prefix_close` available in the Emacs-frontend.+This will replace any custom keyword file that you have already+installed in that way. You can find out about $ISABELLE_HOME_USER+by running + isabelle getenv ISABELLE_HOME_USER + Variant b: Elegance ------------------- A more elegant way is to copy the keywords file provided with our distribution to - $ISABELLE_HOME/etc/isar-keywords-ESPL.el+ $ISABELLE_HOME_USER/etc/isar-keywords-ESPL.el and start Isabelle using the -k switch as follows. @@ -104,7 +109,7 @@ 3.1 scyther-proof-------------+----------------- Usage Example@@ -120,15 +125,13 @@ all specified security properties together with the proof with the fewest number of chain rule applications to stdout. - In order to generate an Isabelle proof script two additional options need to- be added+ To generate an Isabelle proof script, two additional options are required. scyther-proof $EXAMPLE_DIR/classic/NS_Public.spthy --shortest --output=nsl_cert.thy --ASCII The first one specifies the output file and the second one instructs scyther-proof to use Isabelle's ASCII notation as the output format. - To build the source code documentation you can use the call cabal configure; cabal haddock@@ -141,25 +144,40 @@ 3.2 The Isabelle/HOL theories ----------------------------- + Note that in many case the easiest way to start with constructing+ machine-checked proofs interactively is to use a proof script generated by+ scyther-proof.++ Using ProofGeneral+ ------------------+ In the directory output by scyther-proof, load the Tutorial on interactive proof construction using the following commands cd <theory-dir-output-by-scytherproof>/src isabelle emacs Tutorial.thy - or if you've chosen the elegant variant+ or if you've chosen the elegant variant for the keywords file isabelle emacs -k ESPL Tutorial.thy - Note that in many case the easiest way to start with constructing- machine-checked proofs interactively is to use a proof script generated by- scyther-proof. + Using the Isabelle/jEdit Prover IDE+ ----------------------------------- + In the directory output by scyther-proof, load the Tutorial on interactive+ proof construction using the following commands++ cd <theory-dir-output-by-scytherproof>/src+ isabelle jedit -d $SCYTHER_PROOF_HOME/data/isabelle -l ESPL Tutorial.thy++ where $SCYTHER_PROOF_HOME expands to the home directory of scyther-proof.++ *** `Happy Proving :)` -In case of questions do not hesistate to contact me at+In case of questions do not hesistate to contact Simon Meier at iridcode@gmail.com.
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy view
@@ -1,3214 +1,3514 @@ theory "isoiec-9798-2-bdkey_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_2_1_bdkey_A-where "isoiec_9798_2_1_bdkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- ]"--role isoiec_9798_2_1_bdkey_B-where "isoiec_9798_2_1_bdkey_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (MVar ''A'') (AVar ''B'') )- |>- ]"--role isoiec_9798_2_2_bdkey_A-where "isoiec_9798_2_2_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''A'') )- |>- ]"--role isoiec_9798_2_2_bdkey_B-where "isoiec_9798_2_2_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sAV ''B'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (AVar ''A'') )- |>- ]"--role isoiec_9798_2_3_bdkey_A-where "isoiec_9798_2_3_bdkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sAV ''A'',- sMV ''Text3''- |>- ( sKbd (AVar ''B'') (AVar ''A'') )- |>- ]"--role isoiec_9798_2_3_bdkey_B-where "isoiec_9798_2_3_bdkey_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (MVar ''A'') (AVar ''B'') )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''A'',- sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''A'') )- |>- ]"--role isoiec_9798_2_4_bdkey_A-where "isoiec_9798_2_4_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sKbd (AVar ''A'') (MVar ''B'') )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',- sMV ''Text4''- |>- ( sKbd (AVar ''A'') (MVar ''B'') )- |>- ]"--role isoiec_9798_2_4_bdkey_B-where "isoiec_9798_2_4_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text2''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',- sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- ]"--role isoiec_9798_2_5_bdkey_A-where "isoiec_9798_2_5_bdkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',- sAV ''A'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_bdkey_B-where "isoiec_9798_2_5_bdkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',- sMV ''A'', sAV ''B'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_bdkey_P-where "isoiec_9798_2_5_bdkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--role isoiec_9798_2_6_bdkey_A-where "isoiec_9798_2_6_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',- sAV ''A'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_bdkey_B-where "isoiec_9798_2_6_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',- sAV ''A'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_bdkey_P-where "isoiec_9798_2_6_bdkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--role isoiec_9798_2_5_special_TTP_bdkey_A-where "isoiec_9798_2_5_special_TTP_bdkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sN ''TVPa'',- sMV ''Kab'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_special_TTP_bdkey_B-where "isoiec_9798_2_5_special_TTP_bdkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sMV ''TNp'',- sMV ''Kab'', sMV ''A'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_special_TTP_bdkey_P-where "isoiec_9798_2_5_special_TTP_bdkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sMV ''TVPa'',- sN ''Kab'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sN ''TNp'',- sN ''Kab'', sMV ''A'', sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--role isoiec_9798_2_6_special_TTP_bdkey_A-where "isoiec_9798_2_6_special_TTP_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sN ''Ra'',- sMV ''Kab'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_special_TTP_bdkey_B-where "isoiec_9798_2_6_special_TTP_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sN ''Rb'',- sMV ''Kab'', sAV ''A'', sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_special_TTP_bdkey_P-where "isoiec_9798_2_6_special_TTP_bdkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sMV ''Ra'',- sN ''Kab'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sMV ''Rb'',- sN ''Kab'', sMV ''A'', sMV ''Text3''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--protocol isoiec_9798_2_bdkey-where "isoiec_9798_2_bdkey =-{ isoiec_9798_2_1_bdkey_A, isoiec_9798_2_1_bdkey_B,- isoiec_9798_2_2_bdkey_A, isoiec_9798_2_2_bdkey_B,- isoiec_9798_2_3_bdkey_A, isoiec_9798_2_3_bdkey_B,- isoiec_9798_2_4_bdkey_A, isoiec_9798_2_4_bdkey_B,- isoiec_9798_2_5_bdkey_A, isoiec_9798_2_5_bdkey_B,- isoiec_9798_2_5_bdkey_P, isoiec_9798_2_6_bdkey_A,- isoiec_9798_2_6_bdkey_B, isoiec_9798_2_6_bdkey_P,- isoiec_9798_2_5_special_TTP_bdkey_A, isoiec_9798_2_5_special_TTP_bdkey_B,- isoiec_9798_2_5_special_TTP_bdkey_P, isoiec_9798_2_6_special_TTP_bdkey_A,- isoiec_9798_2_6_special_TTP_bdkey_B, isoiec_9798_2_6_special_TTP_bdkey_P-}"--locale restricted_isoiec_9798_2_bdkey_state = isoiec_9798_2_bdkey_state +- assumes isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A;- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''A'' tid0)- |] ==> False"- assumes isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A;- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''A'' tid0)- |] ==> False"- assumes isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B;- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''B'' tid0)- |] ==> False"--type_invariant isoiec_9798_2_bdkey_composed_typing for isoiec_9798_2_bdkey-where "isoiec_9798_2_bdkey_composed_typing = mk_typing- [ ((isoiec_9798_2_1_bdkey_B, ''A''), (KnownT isoiec_9798_2_1_bdkey_B_1))- , ((isoiec_9798_2_3_bdkey_B, ''A''), (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_5_bdkey_B, ''A''), (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_P, ''A''), (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''A''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''A''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_6_bdkey_P, ''A''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''A''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_2_bdkey_A, ''B''), (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_A, ''B''), (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_5_bdkey_P, ''B''), (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''B''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_6_bdkey_A, ''B''), (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_P, ''B''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_5_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_bdkey_A_2) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_bdkey_A_3) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_bdkey_B, ''P''), (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''P''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_6_bdkey_B, ''P''), (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''P''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_4_bdkey_B, ''RA''),- (SumT (KnownT isoiec_9798_2_4_bdkey_B_2) (NonceT isoiec_9798_2_4_bdkey_A ''RA'')))- , ((isoiec_9798_2_2_bdkey_A, ''RB''), (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_A, ''RB''), (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_P, ''Ra''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Ra''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_A, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_P, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Rb''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Rb''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_A ''Rpa'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_A ''Rpa'')))- , ((isoiec_9798_2_1_bdkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_1_bdkey_B_1) (NonceT isoiec_9798_2_1_bdkey_A ''TNA'')))- , ((isoiec_9798_2_3_bdkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_3_bdkey_B_1) (NonceT isoiec_9798_2_3_bdkey_A ''TNA'')))- , ((isoiec_9798_2_3_bdkey_A, ''TNB''),- (SumT (KnownT isoiec_9798_2_3_bdkey_A_2) (NonceT isoiec_9798_2_3_bdkey_B ''TNB'')))- , ((isoiec_9798_2_5_bdkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_A ''TNa'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_A ''TNa'')))- , ((isoiec_9798_2_5_bdkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_bdkey_A_4) (NonceT isoiec_9798_2_5_bdkey_B ''TNb'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4) (NonceT isoiec_9798_2_5_special_TTP_bdkey_B ''TNb'')))- , ((isoiec_9798_2_5_bdkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''TNp'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''TNp'')))- , ((isoiec_9798_2_5_bdkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_1_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_1_bdkey_A_text_1))- , ((isoiec_9798_2_1_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_1_bdkey_B_1))- , ((isoiec_9798_2_2_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_2_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_2_bdkey_B_text_1))- , ((isoiec_9798_2_3_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_3_bdkey_A_text_1))- , ((isoiec_9798_2_3_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_4_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_4_bdkey_B_text_1))- , ((isoiec_9798_2_5_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_bdkey_A_text_1))- , ((isoiec_9798_2_5_bdkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_6_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_bdkey_B_text_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_1))- , ((isoiec_9798_2_1_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_1_bdkey_A_text_1))- , ((isoiec_9798_2_1_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_1_bdkey_B_1))- , ((isoiec_9798_2_2_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_2_bdkey_A_text_2))- , ((isoiec_9798_2_2_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_2_bdkey_B_2))- , ((isoiec_9798_2_3_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_3_bdkey_A_text_1))- , ((isoiec_9798_2_3_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_4_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_4_bdkey_A_text_2))- , ((isoiec_9798_2_4_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_4_bdkey_B_2))- , ((isoiec_9798_2_5_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_6_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_bdkey_A_text_2))- , ((isoiec_9798_2_6_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_2_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_2_bdkey_A_text_2))- , ((isoiec_9798_2_2_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_2_bdkey_B_2))- , ((isoiec_9798_2_3_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_3_bdkey_A_2))- , ((isoiec_9798_2_3_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_3_bdkey_B_text_2))- , ((isoiec_9798_2_4_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_4_bdkey_A_text_2))- , ((isoiec_9798_2_4_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_4_bdkey_B_2))- , ((isoiec_9798_2_5_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- , ((isoiec_9798_2_5_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_6_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_3_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_3_bdkey_A_2))- , ((isoiec_9798_2_3_bdkey_B, ''Text4''),- (KnownT isoiec_9798_2_3_bdkey_B_text_2))- , ((isoiec_9798_2_4_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_4_bdkey_A_3))- , ((isoiec_9798_2_4_bdkey_B, ''Text4''),- (KnownT isoiec_9798_2_4_bdkey_B_text_3))- , ((isoiec_9798_2_5_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- , ((isoiec_9798_2_5_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_6_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- , ((isoiec_9798_2_6_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_4_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_4_bdkey_A_3))- , ((isoiec_9798_2_4_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_4_bdkey_B_text_3))- , ((isoiec_9798_2_5_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_bdkey_A_text_3))- , ((isoiec_9798_2_5_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_6_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- , ((isoiec_9798_2_6_bdkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_5_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_bdkey_A_text_3))- , ((isoiec_9798_2_5_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_6_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_bdkey_A_text_4))- , ((isoiec_9798_2_6_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_5_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_bdkey_A_4))- , ((isoiec_9798_2_5_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_bdkey_B_text_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))- , ((isoiec_9798_2_6_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_bdkey_A_text_4))- , ((isoiec_9798_2_6_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_5_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_bdkey_A_4))- , ((isoiec_9798_2_5_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_bdkey_B_text_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))- , ((isoiec_9798_2_6_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_bdkey_A_5))- , ((isoiec_9798_2_6_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_bdkey_B_text_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))- , ((isoiec_9798_2_6_bdkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_bdkey_A_5))- , ((isoiec_9798_2_6_bdkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_bdkey_B_text_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))- , ((isoiec_9798_2_5_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- , ((isoiec_9798_2_6_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- ]"--sublocale isoiec_9798_2_bdkey_state < isoiec_9798_2_bdkey_composed_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),- LN ''Rpa'' tid0, s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_1_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_1_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_1_bdkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_1_bdkey_A &- ( tid1, isoiec_9798_2_1_bdkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_2_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_2_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_2_bdkey_A &- ( tid1, isoiec_9798_2_2_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_bdkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_bdkey_B &- ( tid1, isoiec_9798_2_3_bdkey_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_bdkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_bdkey_A &- ( tid1, isoiec_9798_2_3_bdkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_bdkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_bdkey_B &- ( tid1, isoiec_9798_2_4_bdkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid1) )- ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''A'' tid0), s(MV ''Text2'' tid1)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_bdkey_A &- ( tid1, isoiec_9798_2_4_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_B &- ( tid1, isoiec_9798_2_5_bdkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(AV ''B'' tid2), s(MV ''Text2'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid0), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,- s(AV ''A'' tid3), s(AV ''B'' tid0), s(MV ''Text3'' tid3)- |}- ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_A &- ( tid1, isoiec_9798_2_5_bdkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &- ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &- ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_B &- ( tid1, isoiec_9798_2_6_bdkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(AV ''B'' tid2), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,- s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_A &- ( tid1, isoiec_9798_2_6_bdkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &- ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &- ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed---lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_B &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid2), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid3,- LN ''Kab'' tid1, s(AV ''B'' tid2), s(MV ''Text3'' tid3)- |}- ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_A &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid1,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid1)- |}- ( Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid2) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid2) )- ( s(MV ''A'' tid2) ) = Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- LN ''Kab'' tid2, s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid2,- LN ''Kab'' tid1, s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed----lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_B &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),- LN ''Rpa'' tid0, s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid2,- LN ''Kab'' tid1, s(AV ''A'' tid2), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid3) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid0) )- ( s(MV ''B'' tid0) ) = Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', LN ''Rpa'' tid0,- LN ''Rb'' tid2, s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_A &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid2,- LN ''Kab'' tid1, s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid3) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid2) )- ( s(AV ''P'' tid2) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid1) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_2_1_bdkey_A+where "isoiec_9798_2_1_bdkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ ]"++role isoiec_9798_2_1_bdkey_B+where "isoiec_9798_2_1_bdkey_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (MVar ''A'') (AVar ''B'') )+ |>+ ]"++role isoiec_9798_2_2_bdkey_A+where "isoiec_9798_2_2_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''A'') )+ |>+ ]"++role isoiec_9798_2_2_bdkey_B+where "isoiec_9798_2_2_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sAV ''B'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (AVar ''A'') )+ |>+ ]"++role isoiec_9798_2_3_bdkey_A+where "isoiec_9798_2_3_bdkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sAV ''A'',+ sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (AVar ''A'') )+ |>+ ]"++role isoiec_9798_2_3_bdkey_B+where "isoiec_9798_2_3_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (MVar ''A'') (AVar ''B'') )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''A'',+ sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''A'') )+ |>+ ]"++role isoiec_9798_2_4_bdkey_A+where "isoiec_9798_2_4_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (AVar ''A'') (MVar ''B'') )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',+ sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (MVar ''B'') )+ |>+ ]"++role isoiec_9798_2_4_bdkey_B+where "isoiec_9798_2_4_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',+ sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ ]"++role isoiec_9798_2_5_bdkey_A+where "isoiec_9798_2_5_bdkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',+ sAV ''A'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_bdkey_B+where "isoiec_9798_2_5_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',+ sMV ''A'', sAV ''B'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_bdkey_P+where "isoiec_9798_2_5_bdkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++role isoiec_9798_2_6_bdkey_A+where "isoiec_9798_2_6_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',+ sAV ''A'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_bdkey_B+where "isoiec_9798_2_6_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',+ sAV ''A'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_bdkey_P+where "isoiec_9798_2_6_bdkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++role isoiec_9798_2_5_special_TTP_bdkey_A+where "isoiec_9798_2_5_special_TTP_bdkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sN ''TVPa'',+ sMV ''Kab'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_special_TTP_bdkey_B+where "isoiec_9798_2_5_special_TTP_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sMV ''TNp'',+ sMV ''Kab'', sMV ''A'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_special_TTP_bdkey_P+where "isoiec_9798_2_5_special_TTP_bdkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sMV ''TVPa'',+ sN ''Kab'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sN ''TNp'',+ sN ''Kab'', sMV ''A'', sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++role isoiec_9798_2_6_special_TTP_bdkey_A+where "isoiec_9798_2_6_special_TTP_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sN ''Ra'',+ sMV ''Kab'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_special_TTP_bdkey_B+where "isoiec_9798_2_6_special_TTP_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sN ''Rb'',+ sMV ''Kab'', sAV ''A'', sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_special_TTP_bdkey_P+where "isoiec_9798_2_6_special_TTP_bdkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sMV ''Ra'',+ sN ''Kab'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sMV ''Rb'',+ sN ''Kab'', sMV ''A'', sMV ''Text3''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++protocol isoiec_9798_2_bdkey+where "isoiec_9798_2_bdkey =+{ isoiec_9798_2_1_bdkey_A, isoiec_9798_2_1_bdkey_B,+ isoiec_9798_2_2_bdkey_A, isoiec_9798_2_2_bdkey_B,+ isoiec_9798_2_3_bdkey_A, isoiec_9798_2_3_bdkey_B,+ isoiec_9798_2_4_bdkey_A, isoiec_9798_2_4_bdkey_B,+ isoiec_9798_2_5_bdkey_A, isoiec_9798_2_5_bdkey_B,+ isoiec_9798_2_5_bdkey_P, isoiec_9798_2_6_bdkey_A,+ isoiec_9798_2_6_bdkey_B, isoiec_9798_2_6_bdkey_P,+ isoiec_9798_2_5_special_TTP_bdkey_A, isoiec_9798_2_5_special_TTP_bdkey_B,+ isoiec_9798_2_5_special_TTP_bdkey_P, isoiec_9798_2_6_special_TTP_bdkey_A,+ isoiec_9798_2_6_special_TTP_bdkey_B, isoiec_9798_2_6_special_TTP_bdkey_P+}"++locale restricted_isoiec_9798_2_bdkey_state = isoiec_9798_2_bdkey_state ++ assumes isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A;+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''A'' tid0)+ |] ==> False"+ assumes isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A;+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''A'' tid0)+ |] ==> False"+ assumes isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B;+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''B'' tid0)+ |] ==> False"++type_invariant isoiec_9798_2_bdkey_composed_typing for isoiec_9798_2_bdkey+where "isoiec_9798_2_bdkey_composed_typing = mk_typing+ [ ((isoiec_9798_2_1_bdkey_B, ''A''), (KnownT isoiec_9798_2_1_bdkey_B_1))+ , ((isoiec_9798_2_3_bdkey_B, ''A''), (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_5_bdkey_B, ''A''), (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_P, ''A''), (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''A''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''A''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_6_bdkey_P, ''A''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''A''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_2_bdkey_A, ''B''), (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_A, ''B''), (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_5_bdkey_P, ''B''), (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''B''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_6_bdkey_A, ''B''), (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_P, ''B''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_5_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_A_2) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_A_3) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_bdkey_B, ''P''), (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''P''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_6_bdkey_B, ''P''), (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''P''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_4_bdkey_B, ''RA''),+ (SumT (KnownT isoiec_9798_2_4_bdkey_B_2) (NonceT isoiec_9798_2_4_bdkey_A ''RA'')))+ , ((isoiec_9798_2_2_bdkey_A, ''RB''), (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_A, ''RB''), (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_P, ''Ra''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Ra''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_A, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_P, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Rb''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Rb''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_A ''Rpa'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_A ''Rpa'')))+ , ((isoiec_9798_2_1_bdkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_1_bdkey_B_1) (NonceT isoiec_9798_2_1_bdkey_A ''TNA'')))+ , ((isoiec_9798_2_3_bdkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_3_bdkey_B_1) (NonceT isoiec_9798_2_3_bdkey_A ''TNA'')))+ , ((isoiec_9798_2_3_bdkey_A, ''TNB''),+ (SumT (KnownT isoiec_9798_2_3_bdkey_A_2) (NonceT isoiec_9798_2_3_bdkey_B ''TNB'')))+ , ((isoiec_9798_2_5_bdkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_A ''TNa'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_A ''TNa'')))+ , ((isoiec_9798_2_5_bdkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_A_4) (NonceT isoiec_9798_2_5_bdkey_B ''TNb'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4) (NonceT isoiec_9798_2_5_special_TTP_bdkey_B ''TNb'')))+ , ((isoiec_9798_2_5_bdkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''TNp'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''TNp'')))+ , ((isoiec_9798_2_5_bdkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_1_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_1_bdkey_A_text_1))+ , ((isoiec_9798_2_1_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_1_bdkey_B_1))+ , ((isoiec_9798_2_2_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_2_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_2_bdkey_B_text_1))+ , ((isoiec_9798_2_3_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_3_bdkey_A_text_1))+ , ((isoiec_9798_2_3_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_4_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_1))+ , ((isoiec_9798_2_5_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_1))+ , ((isoiec_9798_2_5_bdkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_6_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_1))+ , ((isoiec_9798_2_1_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_1_bdkey_A_text_1))+ , ((isoiec_9798_2_1_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_1_bdkey_B_1))+ , ((isoiec_9798_2_2_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_2_bdkey_A_text_2))+ , ((isoiec_9798_2_2_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_2_bdkey_B_2))+ , ((isoiec_9798_2_3_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_3_bdkey_A_text_1))+ , ((isoiec_9798_2_3_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_4_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_4_bdkey_A_text_2))+ , ((isoiec_9798_2_4_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_4_bdkey_B_2))+ , ((isoiec_9798_2_5_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_6_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_2))+ , ((isoiec_9798_2_6_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_2_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_2_bdkey_A_text_2))+ , ((isoiec_9798_2_2_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_2_bdkey_B_2))+ , ((isoiec_9798_2_3_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_3_bdkey_A_2))+ , ((isoiec_9798_2_3_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_3_bdkey_B_text_2))+ , ((isoiec_9798_2_4_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_4_bdkey_A_text_2))+ , ((isoiec_9798_2_4_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_4_bdkey_B_2))+ , ((isoiec_9798_2_5_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ , ((isoiec_9798_2_5_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_6_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_3_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_3_bdkey_A_2))+ , ((isoiec_9798_2_3_bdkey_B, ''Text4''),+ (KnownT isoiec_9798_2_3_bdkey_B_text_2))+ , ((isoiec_9798_2_4_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_4_bdkey_A_3))+ , ((isoiec_9798_2_4_bdkey_B, ''Text4''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_3))+ , ((isoiec_9798_2_5_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ , ((isoiec_9798_2_5_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_6_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ , ((isoiec_9798_2_6_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_4_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_4_bdkey_A_3))+ , ((isoiec_9798_2_4_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_3))+ , ((isoiec_9798_2_5_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_3))+ , ((isoiec_9798_2_5_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_6_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ , ((isoiec_9798_2_6_bdkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_5_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_3))+ , ((isoiec_9798_2_5_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_6_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_4))+ , ((isoiec_9798_2_6_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_5_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_bdkey_A_4))+ , ((isoiec_9798_2_5_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_bdkey_B_text_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))+ , ((isoiec_9798_2_6_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_4))+ , ((isoiec_9798_2_6_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_5_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_bdkey_A_4))+ , ((isoiec_9798_2_5_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_bdkey_B_text_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))+ , ((isoiec_9798_2_6_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_bdkey_A_5))+ , ((isoiec_9798_2_6_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))+ , ((isoiec_9798_2_6_bdkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_bdkey_A_5))+ , ((isoiec_9798_2_6_bdkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))+ , ((isoiec_9798_2_5_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ , ((isoiec_9798_2_6_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ ]"++sublocale isoiec_9798_2_bdkey_state < isoiec_9798_2_bdkey_composed_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),+ LN ''Rpa'' tid0, s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_1_bdkey_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_1_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_1_bdkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_1_bdkey_A &+ ( tid1, isoiec_9798_2_1_bdkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_bdkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_2_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_2_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_2_bdkey_A &+ ( tid1, isoiec_9798_2_2_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_bdkey_A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_bdkey_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_bdkey_B &+ ( tid1, isoiec_9798_2_3_bdkey_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_bdkey_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_bdkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_bdkey_A &+ ( tid1, isoiec_9798_2_3_bdkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_bdkey_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_bdkey_B &+ ( tid1, isoiec_9798_2_4_bdkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid1) )+ ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_bdkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_bdkey_A &+ ( tid1, isoiec_9798_2_4_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_bdkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_B &+ ( tid1, isoiec_9798_2_5_bdkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(AV ''B'' tid2), s(MV ''Text2'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid0), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,+ s(AV ''A'' tid3), s(AV ''B'' tid0), s(MV ''Text3'' tid3)+ |}+ ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_A &+ ( tid1, isoiec_9798_2_5_bdkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &+ ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &+ ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_B &+ ( tid1, isoiec_9798_2_6_bdkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(AV ''B'' tid2), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,+ s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_A &+ ( tid1, isoiec_9798_2_6_bdkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &+ ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &+ ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed+++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_B &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid2), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid3,+ LN ''Kab'' tid1, s(AV ''B'' tid2), s(MV ''Text3'' tid3)+ |}+ ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid1,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid2) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid2) )+ ( s(MV ''A'' tid2) ) = Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ LN ''Kab'' tid2, s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid2,+ LN ''Kab'' tid1, s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),+ LN ''Rpa'' tid0, s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid2,+ LN ''Kab'' tid1, s(AV ''A'' tid2), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid3) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid0) )+ ( s(MV ''B'' tid0) ) = Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', LN ''Rpa'' tid0,+ LN ''Rb'' tid2, s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid2,+ LN ''Kab'' tid1, s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid3) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid2) )+ ( s(AV ''P'' tid2) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid1) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy view
@@ -1,1843 +1,2023 @@ theory "isoiec-9798-2-udkey_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_2_1_udkey_A-where "isoiec_9798_2_1_udkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sMV ''Text1'' |>- ( sK ''A'' ''B'' )- |>- ]"--role isoiec_9798_2_1_udkey_B-where "isoiec_9798_2_1_udkey_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sMV ''Text1'' |>- ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )- |>- ]"--role isoiec_9798_2_2_udkey_A-where "isoiec_9798_2_2_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''Text2'' |>- ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )- |>- ]"--role isoiec_9798_2_2_udkey_B-where "isoiec_9798_2_2_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sMV ''Text2'' |>- ( sK ''A'' ''B'' )- |>- ]"--role isoiec_9798_2_3_udkey_A-where "isoiec_9798_2_3_udkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sMV ''Text1'' |>- ( sK ''A'' ''B'' )- |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sMV ''Text3'' |>- ( sK ''B'' ''A'' )- |>- ]"--role isoiec_9798_2_3_udkey_B-where "isoiec_9798_2_3_udkey_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sMV ''Text1'' |>- ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''Text3'' |>- ( PSymK ( sAV ''B'' ) ( sMV ''A'' ) )- |>- ]"--role isoiec_9798_2_4_udkey_A-where "isoiec_9798_2_4_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'',- sMV ''Text2''- |>- ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',- sMV ''Text4''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''A'' ) )- |>- ]"--role isoiec_9798_2_4_udkey_B-where "isoiec_9798_2_4_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'',- sMV ''Text2''- |>- ( sK ''A'' ''B'' )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',- sMV ''Text4''- |>- ( sK ''B'' ''A'' )- |>- ]"--role isoiec_9798_2_5_udkey_A-where "isoiec_9798_2_5_udkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',- sAV ''B'', sMV ''Text3''- |>- ( sK ''A'' ''P'' ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_udkey_B-where "isoiec_9798_2_5_udkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',- sMV ''A'', sMV ''Text2''- |>- ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_udkey_P-where "isoiec_9798_2_5_udkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',- sMV ''B'', sMV ''Text3''- |>- ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',- sMV ''A'', sMV ''Text2''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )- |>- ]"--role isoiec_9798_2_6_udkey_A-where "isoiec_9798_2_6_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',- sMV ''B'', sMV ''Text4''- |>- ( sK ''A'' ''P'' ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_udkey_B-where "isoiec_9798_2_6_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',- sAV ''A'', sMV ''Text3''- |>- ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_udkey_P-where "isoiec_9798_2_6_udkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',- sMV ''B'', sMV ''Text4''- |>- ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',- sMV ''A'', sMV ''Text3''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )- |>- ]"--protocol isoiec_9798_2_bdkey-where "isoiec_9798_2_bdkey =-{ isoiec_9798_2_1_udkey_A, isoiec_9798_2_1_udkey_B,- isoiec_9798_2_2_udkey_A, isoiec_9798_2_2_udkey_B,- isoiec_9798_2_3_udkey_A, isoiec_9798_2_3_udkey_B,- isoiec_9798_2_4_udkey_A, isoiec_9798_2_4_udkey_B,- isoiec_9798_2_5_udkey_A, isoiec_9798_2_5_udkey_B,- isoiec_9798_2_5_udkey_P, isoiec_9798_2_6_udkey_A,- isoiec_9798_2_6_udkey_B, isoiec_9798_2_6_udkey_P-}"--locale restricted_isoiec_9798_2_bdkey_state = isoiec_9798_2_bdkey_state--type_invariant isoiec_9798_2_bdkey_composed_typing for isoiec_9798_2_bdkey-where "isoiec_9798_2_bdkey_composed_typing = mk_typing- [ ((isoiec_9798_2_1_udkey_B, ''A''), (KnownT isoiec_9798_2_1_udkey_B_1))- , ((isoiec_9798_2_3_udkey_B, ''A''), (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_5_udkey_B, ''A''), (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_P, ''A''), (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_6_udkey_P, ''A''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_2_udkey_A, ''B''), (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_4_udkey_A, ''B''), (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_5_udkey_P, ''B''), (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_6_udkey_A, ''B''), (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_P, ''B''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_5_udkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_udkey_A_2) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))- , ((isoiec_9798_2_5_udkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))- , ((isoiec_9798_2_6_udkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_udkey_A_3) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))- , ((isoiec_9798_2_6_udkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))- , ((isoiec_9798_2_5_udkey_B, ''P''), (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_6_udkey_B, ''P''), (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_4_udkey_B, ''RA''),- (SumT (KnownT isoiec_9798_2_4_udkey_B_2) (NonceT isoiec_9798_2_4_udkey_A ''RA'')))- , ((isoiec_9798_2_2_udkey_A, ''RB''), (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_4_udkey_A, ''RB''), (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_6_udkey_P, ''Ra''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_A, ''Rb''), (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_P, ''Rb''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_A ''Rpa'')))- , ((isoiec_9798_2_1_udkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_1_udkey_B_1) (NonceT isoiec_9798_2_1_udkey_A ''TNA'')))- , ((isoiec_9798_2_3_udkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_3_udkey_B_1) (NonceT isoiec_9798_2_3_udkey_A ''TNA'')))- , ((isoiec_9798_2_3_udkey_A, ''TNB''),- (SumT (KnownT isoiec_9798_2_3_udkey_A_2) (NonceT isoiec_9798_2_3_udkey_B ''TNB'')))- , ((isoiec_9798_2_5_udkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_A ''TNa'')))- , ((isoiec_9798_2_5_udkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_udkey_A_4) (NonceT isoiec_9798_2_5_udkey_B ''TNb'')))- , ((isoiec_9798_2_5_udkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''TNp'')))- , ((isoiec_9798_2_5_udkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_1_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_1_udkey_A_text_1))- , ((isoiec_9798_2_1_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_1_udkey_B_1))- , ((isoiec_9798_2_2_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_2_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_2_udkey_B_text_1))- , ((isoiec_9798_2_3_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_3_udkey_A_text_1))- , ((isoiec_9798_2_3_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_4_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_4_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_4_udkey_B_text_1))- , ((isoiec_9798_2_5_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_udkey_A_text_1))- , ((isoiec_9798_2_5_udkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_6_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_udkey_B_text_1))- , ((isoiec_9798_2_1_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_1_udkey_A_text_1))- , ((isoiec_9798_2_1_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_1_udkey_B_1))- , ((isoiec_9798_2_2_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_2_udkey_A_text_2))- , ((isoiec_9798_2_2_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_2_udkey_B_2))- , ((isoiec_9798_2_3_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_3_udkey_A_text_1))- , ((isoiec_9798_2_3_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_4_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_4_udkey_A_text_2))- , ((isoiec_9798_2_4_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_4_udkey_B_2))- , ((isoiec_9798_2_5_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_6_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_udkey_A_text_2))- , ((isoiec_9798_2_6_udkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_2_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_2_udkey_A_text_2))- , ((isoiec_9798_2_2_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_2_udkey_B_2))- , ((isoiec_9798_2_3_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_3_udkey_A_2))- , ((isoiec_9798_2_3_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_3_udkey_B_text_2))- , ((isoiec_9798_2_4_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_4_udkey_A_text_2))- , ((isoiec_9798_2_4_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_4_udkey_B_2))- , ((isoiec_9798_2_5_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_udkey_A_2))- , ((isoiec_9798_2_5_udkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_6_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_6_udkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_3_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_3_udkey_A_2))- , ((isoiec_9798_2_3_udkey_B, ''Text4''),- (KnownT isoiec_9798_2_3_udkey_B_text_2))- , ((isoiec_9798_2_4_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_4_udkey_A_3))- , ((isoiec_9798_2_4_udkey_B, ''Text4''),- (KnownT isoiec_9798_2_4_udkey_B_text_3))- , ((isoiec_9798_2_5_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_udkey_A_2))- , ((isoiec_9798_2_5_udkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_6_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_udkey_A_3))- , ((isoiec_9798_2_6_udkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_4_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_4_udkey_A_3))- , ((isoiec_9798_2_4_udkey_B, ''Text5''),- (KnownT isoiec_9798_2_4_udkey_B_text_3))- , ((isoiec_9798_2_5_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_udkey_A_text_3))- , ((isoiec_9798_2_5_udkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_6_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_udkey_A_3))- , ((isoiec_9798_2_6_udkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_5_udkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_udkey_A_text_3))- , ((isoiec_9798_2_5_udkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_6_udkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_udkey_A_text_4))- , ((isoiec_9798_2_6_udkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_5_udkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_udkey_A_4))- , ((isoiec_9798_2_5_udkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_udkey_B_text_4))- , ((isoiec_9798_2_6_udkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_udkey_A_text_4))- , ((isoiec_9798_2_6_udkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_5_udkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_udkey_A_4))- , ((isoiec_9798_2_5_udkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_udkey_B_text_4))- , ((isoiec_9798_2_6_udkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_udkey_A_5))- , ((isoiec_9798_2_6_udkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_udkey_B_text_5))- , ((isoiec_9798_2_6_udkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_udkey_A_5))- , ((isoiec_9798_2_6_udkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_udkey_B_text_5))- , ((isoiec_9798_2_5_udkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_udkey_A_2))- , ((isoiec_9798_2_6_udkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_udkey_A_3))- ]"--sublocale isoiec_9798_2_bdkey_state < isoiec_9798_2_bdkey_composed_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_1_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_1_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_1_udkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_1_udkey_A &- ( tid1, isoiec_9798_2_1_udkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_2_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_2_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_2_udkey_A &- ( tid1, isoiec_9798_2_2_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_udkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_udkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_udkey_B &- ( tid1, isoiec_9798_2_3_udkey_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_udkey_A &- ( tid1, isoiec_9798_2_3_udkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_udkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_udkey_B &- ( tid1, isoiec_9798_2_4_udkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(MV ''Text2'' tid1)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_udkey_A &- ( tid1, isoiec_9798_2_4_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_B &- ( tid1, isoiec_9798_2_5_udkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)- |}- ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid0), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,- s(AV ''B'' tid0), s(MV ''Text3'' tid3)- |}- ( K ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_A &- ( tid1, isoiec_9798_2_5_udkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,- s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &- ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &- ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_B &- ( tid1, isoiec_9798_2_6_udkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(MV ''Text3'' tid2)- |}- ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,- s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_A &- ( tid1, isoiec_9798_2_6_udkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,- s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &- ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &- ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_2_1_udkey_A+where "isoiec_9798_2_1_udkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sMV ''Text1'' |>+ ( sK ''A'' ''B'' )+ |>+ ]"++role isoiec_9798_2_1_udkey_B+where "isoiec_9798_2_1_udkey_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sMV ''Text1'' |>+ ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )+ |>+ ]"++role isoiec_9798_2_2_udkey_A+where "isoiec_9798_2_2_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''Text2'' |>+ ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )+ |>+ ]"++role isoiec_9798_2_2_udkey_B+where "isoiec_9798_2_2_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sMV ''Text2'' |>+ ( sK ''A'' ''B'' )+ |>+ ]"++role isoiec_9798_2_3_udkey_A+where "isoiec_9798_2_3_udkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sMV ''Text1'' |>+ ( sK ''A'' ''B'' )+ |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sMV ''Text3'' |>+ ( sK ''B'' ''A'' )+ |>+ ]"++role isoiec_9798_2_3_udkey_B+where "isoiec_9798_2_3_udkey_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sMV ''Text1'' |>+ ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''Text3'' |>+ ( PSymK ( sAV ''B'' ) ( sMV ''A'' ) )+ |>+ ]"++role isoiec_9798_2_4_udkey_A+where "isoiec_9798_2_4_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'',+ sMV ''Text2''+ |>+ ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',+ sMV ''Text4''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''A'' ) )+ |>+ ]"++role isoiec_9798_2_4_udkey_B+where "isoiec_9798_2_4_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'',+ sMV ''Text2''+ |>+ ( sK ''A'' ''B'' )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',+ sMV ''Text4''+ |>+ ( sK ''B'' ''A'' )+ |>+ ]"++role isoiec_9798_2_5_udkey_A+where "isoiec_9798_2_5_udkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',+ sAV ''B'', sMV ''Text3''+ |>+ ( sK ''A'' ''P'' ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_udkey_B+where "isoiec_9798_2_5_udkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',+ sMV ''A'', sMV ''Text2''+ |>+ ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_udkey_P+where "isoiec_9798_2_5_udkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',+ sMV ''B'', sMV ''Text3''+ |>+ ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',+ sMV ''A'', sMV ''Text2''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )+ |>+ ]"++role isoiec_9798_2_6_udkey_A+where "isoiec_9798_2_6_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',+ sMV ''B'', sMV ''Text4''+ |>+ ( sK ''A'' ''P'' ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_udkey_B+where "isoiec_9798_2_6_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',+ sAV ''A'', sMV ''Text3''+ |>+ ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_udkey_P+where "isoiec_9798_2_6_udkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',+ sMV ''B'', sMV ''Text4''+ |>+ ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',+ sMV ''A'', sMV ''Text3''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )+ |>+ ]"++protocol isoiec_9798_2_bdkey+where "isoiec_9798_2_bdkey =+{ isoiec_9798_2_1_udkey_A, isoiec_9798_2_1_udkey_B,+ isoiec_9798_2_2_udkey_A, isoiec_9798_2_2_udkey_B,+ isoiec_9798_2_3_udkey_A, isoiec_9798_2_3_udkey_B,+ isoiec_9798_2_4_udkey_A, isoiec_9798_2_4_udkey_B,+ isoiec_9798_2_5_udkey_A, isoiec_9798_2_5_udkey_B,+ isoiec_9798_2_5_udkey_P, isoiec_9798_2_6_udkey_A,+ isoiec_9798_2_6_udkey_B, isoiec_9798_2_6_udkey_P+}"++locale restricted_isoiec_9798_2_bdkey_state = isoiec_9798_2_bdkey_state++type_invariant isoiec_9798_2_bdkey_composed_typing for isoiec_9798_2_bdkey+where "isoiec_9798_2_bdkey_composed_typing = mk_typing+ [ ((isoiec_9798_2_1_udkey_B, ''A''), (KnownT isoiec_9798_2_1_udkey_B_1))+ , ((isoiec_9798_2_3_udkey_B, ''A''), (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_5_udkey_B, ''A''), (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_P, ''A''), (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_6_udkey_P, ''A''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_2_udkey_A, ''B''), (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_A, ''B''), (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_5_udkey_P, ''B''), (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_6_udkey_A, ''B''), (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_P, ''B''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_5_udkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_udkey_A_2) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))+ , ((isoiec_9798_2_5_udkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))+ , ((isoiec_9798_2_6_udkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_udkey_A_3) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))+ , ((isoiec_9798_2_6_udkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))+ , ((isoiec_9798_2_5_udkey_B, ''P''), (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_6_udkey_B, ''P''), (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_4_udkey_B, ''RA''),+ (SumT (KnownT isoiec_9798_2_4_udkey_B_2) (NonceT isoiec_9798_2_4_udkey_A ''RA'')))+ , ((isoiec_9798_2_2_udkey_A, ''RB''), (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_A, ''RB''), (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_P, ''Ra''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_A, ''Rb''), (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_P, ''Rb''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_A ''Rpa'')))+ , ((isoiec_9798_2_1_udkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_1_udkey_B_1) (NonceT isoiec_9798_2_1_udkey_A ''TNA'')))+ , ((isoiec_9798_2_3_udkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_3_udkey_B_1) (NonceT isoiec_9798_2_3_udkey_A ''TNA'')))+ , ((isoiec_9798_2_3_udkey_A, ''TNB''),+ (SumT (KnownT isoiec_9798_2_3_udkey_A_2) (NonceT isoiec_9798_2_3_udkey_B ''TNB'')))+ , ((isoiec_9798_2_5_udkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_A ''TNa'')))+ , ((isoiec_9798_2_5_udkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_udkey_A_4) (NonceT isoiec_9798_2_5_udkey_B ''TNb'')))+ , ((isoiec_9798_2_5_udkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''TNp'')))+ , ((isoiec_9798_2_5_udkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_1_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_1_udkey_A_text_1))+ , ((isoiec_9798_2_1_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_1_udkey_B_1))+ , ((isoiec_9798_2_2_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_2_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_2_udkey_B_text_1))+ , ((isoiec_9798_2_3_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_3_udkey_A_text_1))+ , ((isoiec_9798_2_3_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_4_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_4_udkey_B_text_1))+ , ((isoiec_9798_2_5_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_udkey_A_text_1))+ , ((isoiec_9798_2_5_udkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_6_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_udkey_B_text_1))+ , ((isoiec_9798_2_1_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_1_udkey_A_text_1))+ , ((isoiec_9798_2_1_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_1_udkey_B_1))+ , ((isoiec_9798_2_2_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_2_udkey_A_text_2))+ , ((isoiec_9798_2_2_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_2_udkey_B_2))+ , ((isoiec_9798_2_3_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_3_udkey_A_text_1))+ , ((isoiec_9798_2_3_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_4_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_4_udkey_A_text_2))+ , ((isoiec_9798_2_4_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_4_udkey_B_2))+ , ((isoiec_9798_2_5_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_6_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_udkey_A_text_2))+ , ((isoiec_9798_2_6_udkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_2_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_2_udkey_A_text_2))+ , ((isoiec_9798_2_2_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_2_udkey_B_2))+ , ((isoiec_9798_2_3_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_3_udkey_A_2))+ , ((isoiec_9798_2_3_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_3_udkey_B_text_2))+ , ((isoiec_9798_2_4_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_4_udkey_A_text_2))+ , ((isoiec_9798_2_4_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_4_udkey_B_2))+ , ((isoiec_9798_2_5_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ , ((isoiec_9798_2_5_udkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_6_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_6_udkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_3_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_3_udkey_A_2))+ , ((isoiec_9798_2_3_udkey_B, ''Text4''),+ (KnownT isoiec_9798_2_3_udkey_B_text_2))+ , ((isoiec_9798_2_4_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_4_udkey_A_3))+ , ((isoiec_9798_2_4_udkey_B, ''Text4''),+ (KnownT isoiec_9798_2_4_udkey_B_text_3))+ , ((isoiec_9798_2_5_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ , ((isoiec_9798_2_5_udkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_6_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ , ((isoiec_9798_2_6_udkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_4_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_4_udkey_A_3))+ , ((isoiec_9798_2_4_udkey_B, ''Text5''),+ (KnownT isoiec_9798_2_4_udkey_B_text_3))+ , ((isoiec_9798_2_5_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_udkey_A_text_3))+ , ((isoiec_9798_2_5_udkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_6_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ , ((isoiec_9798_2_6_udkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_5_udkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_udkey_A_text_3))+ , ((isoiec_9798_2_5_udkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_6_udkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_udkey_A_text_4))+ , ((isoiec_9798_2_6_udkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_5_udkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_udkey_A_4))+ , ((isoiec_9798_2_5_udkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_udkey_B_text_4))+ , ((isoiec_9798_2_6_udkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_udkey_A_text_4))+ , ((isoiec_9798_2_6_udkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_5_udkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_udkey_A_4))+ , ((isoiec_9798_2_5_udkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_udkey_B_text_4))+ , ((isoiec_9798_2_6_udkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_udkey_A_5))+ , ((isoiec_9798_2_6_udkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_udkey_B_text_5))+ , ((isoiec_9798_2_6_udkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_udkey_A_5))+ , ((isoiec_9798_2_6_udkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_udkey_B_text_5))+ , ((isoiec_9798_2_5_udkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ , ((isoiec_9798_2_6_udkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ ]"++sublocale isoiec_9798_2_bdkey_state < isoiec_9798_2_bdkey_composed_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_1_udkey_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_1_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_1_udkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_1_udkey_A &+ ( tid1, isoiec_9798_2_1_udkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_udkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_2_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_2_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_2_udkey_A &+ ( tid1, isoiec_9798_2_2_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_udkey_A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_udkey_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_udkey_B &+ ( tid1, isoiec_9798_2_3_udkey_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_udkey_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_udkey_B_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_udkey_A &+ ( tid1, isoiec_9798_2_3_udkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_udkey_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_udkey_B &+ ( tid1, isoiec_9798_2_4_udkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(MV ''Text2'' tid1)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_udkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_udkey_A &+ ( tid1, isoiec_9798_2_4_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_udkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_B &+ ( tid1, isoiec_9798_2_5_udkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)+ |}+ ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid0), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,+ s(AV ''B'' tid0), s(MV ''Text3'' tid3)+ |}+ ( K ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_A &+ ( tid1, isoiec_9798_2_5_udkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,+ s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &+ ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &+ ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_B &+ ( tid1, isoiec_9798_2_6_udkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(MV ''Text3'' tid2)+ |}+ ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,+ s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_A &+ ( tid1, isoiec_9798_2_6_udkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,+ s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &+ ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &+ ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy view
@@ -1,2773 +1,3179 @@ theory "isoiec-9798-3_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_3_1_A-where "isoiec_9798_3_1_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_1_sig_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_1_B-where "isoiec_9798_3_1_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_1_sig_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- ]"--role isoiec_9798_3_2_A-where "isoiec_9798_3_2_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_2_sig_2'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_2_B-where "isoiec_9798_3_2_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_2_sig_2'', sMV ''Ra'', sN ''Rb'', sAV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_3_A-where "isoiec_9798_3_3_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_3_sig_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sPK ''A'' )- |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_3_sig_2'', sMV ''TNB'', sAV ''A'',- sMV ''Text3''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_3_B-where "isoiec_9798_3_3_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_3_sig_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_3_sig_2'', sN ''TNB'', sMV ''A'',- sMV ''Text3''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_4_A-where "isoiec_9798_3_4_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_4_sig_1'', sN ''RA'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PSign <| sC ''isoiec_9798_3_4_sig_2'', sMV ''RB'', sN ''RA'', sAV ''A'',- sMV ''Text4''- |>- ( PAsymPK ( sMV ''B'' ) )- |>- ]"--role isoiec_9798_3_4_B-where "isoiec_9798_3_4_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_4_sig_1'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PSign <| sC ''isoiec_9798_3_4_sig_2'', sN ''RB'', sMV ''RA'', sAV ''A'',- sMV ''Text4''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_5_A-where "isoiec_9798_3_5_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''RA'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text2'' |>- , Recv ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text6'',- PSign <| sC ''isoiec_9798_3_5_sig_1'', sMV ''RB'', sN ''RA'', sAV ''A'',- sMV ''Text5''- |>- ( sPK ''B'' )- |>- , Recv ''text_4'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_5_sig_2'', sN ''RA'', sMV ''RB'', sAV ''B'',- sMV ''Text3''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_5_B-where "isoiec_9798_3_5_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''RA'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''B'', sMV ''A'', sN ''RB'', sMV ''Text2'' |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''B'', sMV ''A'', sMV ''Text6'',- PSign <| sC ''isoiec_9798_3_5_sig_1'', sN ''RB'', sMV ''RA'', sMV ''A'',- sMV ''Text5''- |>- ( sPK ''B'' )- |>- , Recv ''4'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_5_sig_2'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text3''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- ]"--role isoiec_9798_3_6_1_A-where "isoiec_9798_3_6_1_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text3'', sMV ''TokenBA''- |>- , Recv ''text_3'' ( sMV ''Text4'' )- , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',- sMV ''Text4''- |>- , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',- sPK ''A'', sAV ''B'', sMV ''pkB'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sN ''Rpa'', sAV ''B'',- sMV ''pkB'', sMV ''Text6''- |>- ( sPK ''T'' ),- sMV ''TokenTA_for_B''- |>- , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenBA'' |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sN ''Ra'',- sMV ''Rb'', sAV ''A'', sMV ''Text2''- |>- ( sMV ''pkB'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Text9'', sAV ''T'',- sMV ''TokenTA_for_B'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sMV ''Rb'', sN ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text8''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_6_1_B-where "isoiec_9798_3_6_1_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sMV ''Ra'',- sN ''Rb'', sMV ''A'', sMV ''Text2''- |>- ( sPK ''B'' )- |>- , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Text9'', sMV ''T'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sN ''Rb'', sMV ''A'',- sMV ''pkA'', sMV ''Text5''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sN ''Rb'', sMV ''Ra5'',- sAV ''B'', sMV ''A'', sMV ''Text8''- |>- ( sMV ''pkA'' )- |>- ]"--role isoiec_9798_3_6_1_T-where "isoiec_9798_3_6_1_T =- [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',- sMV ''Text4''- |>- , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sMV ''Rpa'', sMV ''B'',- PAsymPK ( sMV ''B'' ), sMV ''Text6''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sMV ''Rb'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''Text5''- |>- ( sPK ''T'' )- |>- ]"--role isoiec_9798_3_6_2_A-where "isoiec_9798_3_6_2_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text3'', sMV ''TokenBA''- |>- , Recv ''text_3'' ( sMV ''Text4'' )- , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',- sMV ''Text4''- |>- , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',- sPK ''A'', sAV ''B'', sMV ''pkB'', sMV ''TokenTA''- |>- , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'',- sMV ''TokenBA''- |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sN ''Rpa'', sMV ''Rb'',- sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sN ''Ra'',- sMV ''Rb'', sAV ''A'', sMV ''Text2''- |>- ( sMV ''pkB'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sN ''Rpa'', sMV ''Text9'',- sAV ''T'', sMV ''TokenTA'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sMV ''Rb'', sN ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text8''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_6_2_B-where "isoiec_9798_3_6_2_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sMV ''Ra'',- sN ''Rb'', sMV ''A'', sMV ''Text2''- |>- ( sPK ''B'' )- |>- , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sN ''Rb'', sMV ''Ra5'',- sAV ''B'', sMV ''A'', sMV ''Text8''- |>- ( sMV ''pkA'' )- |>- ]"--role isoiec_9798_3_6_2_T-where "isoiec_9798_3_6_2_T =- [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',- sMV ''Text4''- |>- , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sMV ''Rb'',- sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- sMV ''Text5''- |>- ( sPK ''T'' )- |>- ]"--role isoiec_9798_3_7_1_A-where "isoiec_9798_3_7_1_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',- sPK ''A'', sMV ''B'', sMV ''pkB'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sN ''Rpa'', sMV ''B'',- sMV ''pkB'', sMV ''Text4''- |>- ( sPK ''T'' ),- sMV ''TokenTA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',- sAV ''T'', sMV ''TokenTA_for_B'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sMV ''Rb'', sN ''Ra'',- sMV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sPK ''A'' )- |>- , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sN ''Ra'', sMV ''Rb'',- sAV ''A'', sMV ''B'', sMV ''Text8''- |>- ( sMV ''pkB'' )- |>- ]"--role isoiec_9798_3_7_1_B-where "isoiec_9798_3_7_1_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sN ''Rb'', sAV ''A'',- sMV ''pkA'', sMV ''Text3''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sN ''Rb'', sMV ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sMV ''pkA'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sMV ''Ra'', sN ''Rb'',- sAV ''A'', sAV ''B'', sMV ''Text8''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_7_1_T-where "isoiec_9798_3_7_1_T =- [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sMV ''Rpa'', sMV ''B'',- PAsymPK ( sMV ''B'' ), sMV ''Text4''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sMV ''Rb'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''Text3''- |>- ( sPK ''T'' )- |>- ]"--role isoiec_9798_3_7_2_A-where "isoiec_9798_3_7_2_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',- sPK ''A'', sMV ''B'', sMV ''pkB'', sMV ''TokenTA''- |>- , Send ''check_3_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'' |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_3_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sN ''Rpa'', sMV ''Rb'',- sAV ''A'', sMV ''pkA'', sMV ''B'', sMV ''pkB'', sMV ''Text3''- |>- ( sPK ''T'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',- sAV ''T'', sMV ''TokenTA'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sMV ''Rb'', sN ''Ra'',- sMV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sPK ''A'' )- |>- , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sN ''Ra'', sMV ''Rb'',- sAV ''A'', sMV ''B'', sMV ''Text8''- |>- ( sMV ''pkB'' )- |>- ]"--role isoiec_9798_3_7_2_B-where "isoiec_9798_3_7_2_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sN ''Rb'',- sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text3''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sN ''Rb'', sMV ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sMV ''pkA'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sMV ''Ra'', sN ''Rb'',- sAV ''A'', sAV ''B'', sMV ''Text8''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_7_2_T-where "isoiec_9798_3_7_2_T =- [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sMV ''Rb'',- sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- sMV ''Text3''- |>- ( sPK ''T'' )- |>- ]"--protocol isoiec_9798_3-where "isoiec_9798_3 =-{ isoiec_9798_3_1_A, isoiec_9798_3_1_B, isoiec_9798_3_2_A,- isoiec_9798_3_2_B, isoiec_9798_3_3_A, isoiec_9798_3_3_B,- isoiec_9798_3_4_A, isoiec_9798_3_4_B, isoiec_9798_3_5_A,- isoiec_9798_3_5_B, isoiec_9798_3_6_1_A, isoiec_9798_3_6_1_B,- isoiec_9798_3_6_1_T, isoiec_9798_3_6_2_A, isoiec_9798_3_6_2_B,- isoiec_9798_3_6_2_T, isoiec_9798_3_7_1_A, isoiec_9798_3_7_1_B,- isoiec_9798_3_7_1_T, isoiec_9798_3_7_2_A, isoiec_9798_3_7_2_B,- isoiec_9798_3_7_2_T-}"--locale restricted_isoiec_9798_3_state = isoiec_9798_3_state--type_invariant isoiec_9798_3_composed_typing for isoiec_9798_3-where "isoiec_9798_3_composed_typing = mk_typing- [ ((isoiec_9798_3_1_B, ''A''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_3_B, ''A''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_5_B, ''A''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_6_1_B, ''A''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_1_T, ''A''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_2_B, ''A''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_6_2_T, ''A''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_7_1_T, ''A''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_2_T, ''A''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_2_A, ''B''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_4_A, ''B''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_6_1_T, ''B''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_2_T, ''B''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_7_1_A, ''B''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_T, ''B''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_2_A, ''B''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_T, ''B''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_4_B, ''RA''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_5_B, ''RA''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_4_A, ''RB''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_5_A, ''RB''), (KnownT isoiec_9798_3_5_A_2))- , ((isoiec_9798_3_2_B, ''Ra''), (KnownT isoiec_9798_3_2_B_2))- , ((isoiec_9798_3_6_1_B, ''Ra''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_2_B, ''Ra''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_7_1_B, ''Ra''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_2_B, ''Ra''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_6_1_B, ''Ra5''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_2_B, ''Ra5''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_2_A, ''Rb''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_6_1_A, ''Rb''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_1_T, ''Rb''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_2_A, ''Rb''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_T, ''Rb''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_7_1_A, ''Rb''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_T, ''Rb''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_2_A, ''Rb''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_T, ''Rb''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_6_1_T, ''Rpa''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_2_B, ''Rpa''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_T, ''Rpa''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_7_1_B, ''Rpa''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_T, ''Rpa''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_2_B, ''Rpa''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_T, ''Rpa''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_6_1_B, ''T''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_2_B, ''T''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_7_1_B, ''T''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_2_B, ''T''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_1_B, ''TNA''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_3_B, ''TNA''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_3_A, ''TNB''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_1_A, ''Text1''), (KnownT isoiec_9798_3_1_A_text_1))- , ((isoiec_9798_3_1_B, ''Text1''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_2_A, ''Text1''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_2_B, ''Text1''), (KnownT isoiec_9798_3_2_B_text_1))- , ((isoiec_9798_3_3_A, ''Text1''), (KnownT isoiec_9798_3_3_A_text_1))- , ((isoiec_9798_3_3_B, ''Text1''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_4_A, ''Text1''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_4_B, ''Text1''), (KnownT isoiec_9798_3_4_B_text_1))- , ((isoiec_9798_3_5_A, ''Text1''), (KnownT isoiec_9798_3_5_A_text_1))- , ((isoiec_9798_3_5_B, ''Text1''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_6_1_A, ''Text1''), (KnownT isoiec_9798_3_6_1_A_text_1))- , ((isoiec_9798_3_6_1_B, ''Text1''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_2_A, ''Text1''), (KnownT isoiec_9798_3_6_2_A_text_1))- , ((isoiec_9798_3_6_2_B, ''Text1''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_7_1_A, ''Text1''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_B, ''Text1''), (KnownT isoiec_9798_3_7_1_B_text_1))- , ((isoiec_9798_3_7_2_A, ''Text1''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_B, ''Text1''), (KnownT isoiec_9798_3_7_2_B_text_1))- , ((isoiec_9798_3_1_A, ''Text2''), (KnownT isoiec_9798_3_1_A_text_1))- , ((isoiec_9798_3_1_B, ''Text2''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_2_A, ''Text2''), (KnownT isoiec_9798_3_2_A_text_2))- , ((isoiec_9798_3_2_B, ''Text2''), (KnownT isoiec_9798_3_2_B_2))- , ((isoiec_9798_3_3_A, ''Text2''), (KnownT isoiec_9798_3_3_A_text_1))- , ((isoiec_9798_3_3_B, ''Text2''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_4_A, ''Text2''), (KnownT isoiec_9798_3_4_A_text_2))- , ((isoiec_9798_3_4_B, ''Text2''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_5_A, ''Text2''), (KnownT isoiec_9798_3_5_A_2))- , ((isoiec_9798_3_5_B, ''Text2''), (KnownT isoiec_9798_3_5_B_text_2))- , ((isoiec_9798_3_6_1_A, ''Text2''),- (KnownT isoiec_9798_3_6_1_A_check_4_in))- , ((isoiec_9798_3_6_1_B, ''Text2''), (KnownT isoiec_9798_3_6_1_B_text_2))- , ((isoiec_9798_3_6_2_A, ''Text2''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''Text2''), (KnownT isoiec_9798_3_6_2_B_text_2))- , ((isoiec_9798_3_7_1_A, ''Text2''), (KnownT isoiec_9798_3_7_1_A_text_2))- , ((isoiec_9798_3_7_1_T, ''Text2''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_2_A, ''Text2''), (KnownT isoiec_9798_3_7_2_A_text_2))- , ((isoiec_9798_3_7_2_T, ''Text2''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_2_A, ''Text3''), (KnownT isoiec_9798_3_2_A_text_2))- , ((isoiec_9798_3_2_B, ''Text3''), (KnownT isoiec_9798_3_2_B_2))- , ((isoiec_9798_3_3_A, ''Text3''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_3_B, ''Text3''), (KnownT isoiec_9798_3_3_B_text_2))- , ((isoiec_9798_3_4_A, ''Text3''), (KnownT isoiec_9798_3_4_A_text_2))- , ((isoiec_9798_3_4_B, ''Text3''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_5_A, ''Text3''), (KnownT isoiec_9798_3_5_A_text_4))- , ((isoiec_9798_3_5_B, ''Text3''), (KnownT isoiec_9798_3_5_B_4))- , ((isoiec_9798_3_6_1_A, ''Text3''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_1_B, ''Text3''), (KnownT isoiec_9798_3_6_1_B_text_2))- , ((isoiec_9798_3_6_2_A, ''Text3''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_B, ''Text3''), (KnownT isoiec_9798_3_6_2_B_text_2))- , ((isoiec_9798_3_7_1_B, ''Text3''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_T, ''Text3''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_7_2_A, ''Text3''),- (KnownT isoiec_9798_3_7_2_A_check_3_in))- , ((isoiec_9798_3_7_2_B, ''Text3''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_T, ''Text3''), (KnownT isoiec_9798_3_7_2_T_text_3))- , ((isoiec_9798_3_3_A, ''Text4''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_3_B, ''Text4''), (KnownT isoiec_9798_3_3_B_text_2))- , ((isoiec_9798_3_4_A, ''Text4''), (KnownT isoiec_9798_3_4_A_3))- , ((isoiec_9798_3_4_B, ''Text4''), (KnownT isoiec_9798_3_4_B_text_3))- , ((isoiec_9798_3_5_A, ''Text4''), (KnownT isoiec_9798_3_5_A_text_4))- , ((isoiec_9798_3_5_B, ''Text4''), (KnownT isoiec_9798_3_5_B_4))- , ((isoiec_9798_3_6_1_A, ''Text4''), (KnownT isoiec_9798_3_6_1_A_text_3))- , ((isoiec_9798_3_6_1_T, ''Text4''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_2_A, ''Text4''), (KnownT isoiec_9798_3_6_2_A_text_3))- , ((isoiec_9798_3_6_2_T, ''Text4''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_7_1_A, ''Text4''), (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_1_T, ''Text4''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_4_A, ''Text5''), (KnownT isoiec_9798_3_4_A_3))- , ((isoiec_9798_3_4_B, ''Text5''), (KnownT isoiec_9798_3_4_B_text_3))- , ((isoiec_9798_3_5_A, ''Text5''), (KnownT isoiec_9798_3_5_A_3))- , ((isoiec_9798_3_5_B, ''Text5''), (KnownT isoiec_9798_3_5_B_text_3))- , ((isoiec_9798_3_6_1_B, ''Text5''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_T, ''Text5''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_6_2_A, ''Text5''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''Text5''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_T, ''Text5''), (KnownT isoiec_9798_3_6_2_T_text_4))- , ((isoiec_9798_3_7_1_A, ''Text5''), (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_1_T, ''Text5''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_7_2_A, ''Text5''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_7_2_T, ''Text5''), (KnownT isoiec_9798_3_7_2_T_text_3))- , ((isoiec_9798_3_5_A, ''Text6''), (KnownT isoiec_9798_3_5_A_3))- , ((isoiec_9798_3_5_B, ''Text6''), (KnownT isoiec_9798_3_5_B_text_3))- , ((isoiec_9798_3_6_1_A, ''Text6''), (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_1_T, ''Text6''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_7_1_A, ''Text6''), (KnownT isoiec_9798_3_7_1_A_text_4))- , ((isoiec_9798_3_7_1_B, ''Text6''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_2_A, ''Text6''), (KnownT isoiec_9798_3_7_2_A_text_4))- , ((isoiec_9798_3_7_2_B, ''Text6''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_6_1_A, ''Text7''), (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_1_T, ''Text7''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_6_2_A, ''Text7''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_6_2_T, ''Text7''), (KnownT isoiec_9798_3_6_2_T_text_4))- , ((isoiec_9798_3_7_1_A, ''Text7''), (KnownT isoiec_9798_3_7_1_A_text_4))- , ((isoiec_9798_3_7_2_A, ''Text7''), (KnownT isoiec_9798_3_7_2_A_text_4))- , ((isoiec_9798_3_6_1_A, ''Text8''), (KnownT isoiec_9798_3_6_1_A_text_5))- , ((isoiec_9798_3_6_1_B, ''Text8''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_2_A, ''Text8''), (KnownT isoiec_9798_3_6_2_A_text_5))- , ((isoiec_9798_3_6_2_B, ''Text8''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_7_1_A, ''Text8''), (KnownT isoiec_9798_3_7_1_A_5))- , ((isoiec_9798_3_7_1_B, ''Text8''), (KnownT isoiec_9798_3_7_1_B_text_5))- , ((isoiec_9798_3_7_2_A, ''Text8''), (KnownT isoiec_9798_3_7_2_A_5))- , ((isoiec_9798_3_7_2_B, ''Text8''), (KnownT isoiec_9798_3_7_2_B_text_5))- , ((isoiec_9798_3_6_1_A, ''Text9''), (KnownT isoiec_9798_3_6_1_A_text_5))- , ((isoiec_9798_3_6_1_B, ''Text9''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_2_A, ''Text9''), (KnownT isoiec_9798_3_6_2_A_text_5))- , ((isoiec_9798_3_6_2_B, ''Text9''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_7_1_A, ''Text9''), (KnownT isoiec_9798_3_7_1_A_5))- , ((isoiec_9798_3_7_1_B, ''Text9''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_2_A, ''Text9''), (KnownT isoiec_9798_3_7_2_A_5))- , ((isoiec_9798_3_7_2_B, ''Text9''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_6_1_A, ''TokenBA''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_2_A, ''TokenBA''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_A, ''TokenTA''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_7_2_A, ''TokenTA''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_6_1_A, ''TokenTA_for_B''),- (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_7_1_A, ''TokenTA_for_B''),- (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_6_1_B, ''pkA''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_2_A, ''pkA''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''pkA''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_7_1_B, ''pkA''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_2_A, ''pkA''),- (KnownT isoiec_9798_3_7_2_A_check_3_in))- , ((isoiec_9798_3_7_2_B, ''pkA''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_6_1_A, ''pkB''), (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_2_A, ''pkB''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_6_2_B, ''pkB''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_7_1_A, ''pkB''), (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_2_A, ''pkB''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_7_2_B, ''pkB''), (KnownT isoiec_9798_3_7_2_B_4))- ]"--sublocale isoiec_9798_3_state < isoiec_9798_3_composed_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_composed_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Ra5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Ra5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_composed_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_composed_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_1_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_1_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_1_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_1_A &- ( tid1, isoiec_9798_3_1_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_1_sig_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_2_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_2_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_2_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_2_A &- ( tid1, isoiec_9798_3_2_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_2_sig_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_3_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_3_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_3_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_3_B &- ( tid1, isoiec_9798_3_3_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_3_sig_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_3_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_3_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_3_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_3_A &- ( tid1, isoiec_9798_3_3_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_3_sig_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_4_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_4_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_4_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_4_B &- ( tid1, isoiec_9798_3_4_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(AV ''A'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_4_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_4_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_4_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_4_A &- ( tid1, isoiec_9798_3_4_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_5_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_5_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_5_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_5_B &- ( tid1, isoiec_9798_3_5_B_3 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text5'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_1'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(AV ''A'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_5_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_5_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_5_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_5_A &- ( tid1, isoiec_9798_3_5_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text3'' tid1), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text3'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_2'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_1'', LN ''RB'' tid0, LN ''RA'' tid1,- s(AV ''A'' tid1), s(MV ''Text5'' tid1)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_B &- ( tid1, isoiec_9798_3_6_1_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_A &- ( tid1, isoiec_9798_3_6_1_A_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text8'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra5'' tid0),- LN ''Rb'' tid0, s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,- s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_5'', LN ''Rb'' tid0,- s(MV ''Ra5'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_T &- ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &- {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),- PK ( s(MV ''B'' tid1) ), s(MV ''Text6'' tid1)- |} = {| s(AV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,- s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_T &- ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),- PK ( s(MV ''A'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,- s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,- s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_B &- ( tid1, isoiec_9798_3_6_2_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_A &- ( tid1, isoiec_9798_3_6_2_A_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text8'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra5'' tid0),- LN ''Rb'' tid0, s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_5'', LN ''Rb'' tid0,- s(MV ''Ra5'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_T &- ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''T'' tid0),- LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_T &- ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),- s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_B &- ( tid1, isoiec_9798_3_7_1_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_5'', LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_A &- ( tid1, isoiec_9798_3_7_1_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,- s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_4'', LN ''Rb'' tid0,- s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),- s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_T &- ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &- {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),- PK ( s(MV ''B'' tid1) ), s(MV ''Text4'' tid1)- |} = {| s(MV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,- s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_T &- ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),- PK ( s(MV ''A'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,- s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,- s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_B &- ( tid1, isoiec_9798_3_7_2_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_5'', LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_A &- ( tid1, isoiec_9798_3_7_2_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_4'', LN ''Rb'' tid0,- s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),- s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_T &- ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''T'' tid0),- LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_T &- ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),- s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_3_1_A+where "isoiec_9798_3_1_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_1_sig_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_1_B+where "isoiec_9798_3_1_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_1_sig_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ ]"++role isoiec_9798_3_2_A+where "isoiec_9798_3_2_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_2_sig_2'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_2_B+where "isoiec_9798_3_2_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_2_sig_2'', sMV ''Ra'', sN ''Rb'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_3_A+where "isoiec_9798_3_3_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_3_sig_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_3_sig_2'', sMV ''TNB'', sAV ''A'',+ sMV ''Text3''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_3_B+where "isoiec_9798_3_3_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_3_sig_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_3_sig_2'', sN ''TNB'', sMV ''A'',+ sMV ''Text3''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_4_A+where "isoiec_9798_3_4_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_4_sig_1'', sN ''RA'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PSign <| sC ''isoiec_9798_3_4_sig_2'', sMV ''RB'', sN ''RA'', sAV ''A'',+ sMV ''Text4''+ |>+ ( PAsymPK ( sMV ''B'' ) )+ |>+ ]"++role isoiec_9798_3_4_B+where "isoiec_9798_3_4_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_4_sig_1'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PSign <| sC ''isoiec_9798_3_4_sig_2'', sN ''RB'', sMV ''RA'', sAV ''A'',+ sMV ''Text4''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_5_A+where "isoiec_9798_3_5_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''RA'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text2'' |>+ , Recv ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text6'',+ PSign <| sC ''isoiec_9798_3_5_sig_1'', sMV ''RB'', sN ''RA'', sAV ''A'',+ sMV ''Text5''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''text_4'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_5_sig_2'', sN ''RA'', sMV ''RB'', sAV ''B'',+ sMV ''Text3''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_5_B+where "isoiec_9798_3_5_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''RA'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''B'', sMV ''A'', sN ''RB'', sMV ''Text2'' |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''B'', sMV ''A'', sMV ''Text6'',+ PSign <| sC ''isoiec_9798_3_5_sig_1'', sN ''RB'', sMV ''RA'', sMV ''A'',+ sMV ''Text5''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''4'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_5_sig_2'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ ]"++role isoiec_9798_3_6_1_A+where "isoiec_9798_3_6_1_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text3'', sMV ''TokenBA''+ |>+ , Recv ''text_3'' ( sMV ''Text4'' )+ , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',+ sMV ''Text4''+ |>+ , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',+ sPK ''A'', sAV ''B'', sMV ''pkB'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sN ''Rpa'', sAV ''B'',+ sMV ''pkB'', sMV ''Text6''+ |>+ ( sPK ''T'' ),+ sMV ''TokenTA_for_B''+ |>+ , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenBA'' |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sN ''Ra'',+ sMV ''Rb'', sAV ''A'', sMV ''Text2''+ |>+ ( sMV ''pkB'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Text9'', sAV ''T'',+ sMV ''TokenTA_for_B'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sMV ''Rb'', sN ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text8''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_6_1_B+where "isoiec_9798_3_6_1_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sMV ''Ra'',+ sN ''Rb'', sMV ''A'', sMV ''Text2''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Text9'', sMV ''T'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sN ''Rb'', sMV ''A'',+ sMV ''pkA'', sMV ''Text5''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sMV ''A'', sMV ''Text8''+ |>+ ( sMV ''pkA'' )+ |>+ ]"++role isoiec_9798_3_6_1_T+where "isoiec_9798_3_6_1_T =+ [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',+ sMV ''Text4''+ |>+ , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sMV ''Rpa'', sMV ''B'',+ PAsymPK ( sMV ''B'' ), sMV ''Text6''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sMV ''Rb'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''Text5''+ |>+ ( sPK ''T'' )+ |>+ ]"++role isoiec_9798_3_6_2_A+where "isoiec_9798_3_6_2_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text3'', sMV ''TokenBA''+ |>+ , Recv ''text_3'' ( sMV ''Text4'' )+ , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',+ sMV ''Text4''+ |>+ , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',+ sPK ''A'', sAV ''B'', sMV ''pkB'', sMV ''TokenTA''+ |>+ , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'',+ sMV ''TokenBA''+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sN ''Rpa'', sMV ''Rb'',+ sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sN ''Ra'',+ sMV ''Rb'', sAV ''A'', sMV ''Text2''+ |>+ ( sMV ''pkB'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sN ''Rpa'', sMV ''Text9'',+ sAV ''T'', sMV ''TokenTA'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sMV ''Rb'', sN ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text8''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_6_2_B+where "isoiec_9798_3_6_2_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sMV ''Ra'',+ sN ''Rb'', sMV ''A'', sMV ''Text2''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sMV ''A'', sMV ''Text8''+ |>+ ( sMV ''pkA'' )+ |>+ ]"++role isoiec_9798_3_6_2_T+where "isoiec_9798_3_6_2_T =+ [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',+ sMV ''Text4''+ |>+ , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sMV ''Rb'',+ sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ sMV ''Text5''+ |>+ ( sPK ''T'' )+ |>+ ]"++role isoiec_9798_3_7_1_A+where "isoiec_9798_3_7_1_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',+ sPK ''A'', sMV ''B'', sMV ''pkB'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sN ''Rpa'', sMV ''B'',+ sMV ''pkB'', sMV ''Text4''+ |>+ ( sPK ''T'' ),+ sMV ''TokenTA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',+ sAV ''T'', sMV ''TokenTA_for_B'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sMV ''Rb'', sN ''Ra'',+ sMV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sN ''Ra'', sMV ''Rb'',+ sAV ''A'', sMV ''B'', sMV ''Text8''+ |>+ ( sMV ''pkB'' )+ |>+ ]"++role isoiec_9798_3_7_1_B+where "isoiec_9798_3_7_1_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sN ''Rb'', sAV ''A'',+ sMV ''pkA'', sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sMV ''pkA'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sMV ''Ra'', sN ''Rb'',+ sAV ''A'', sAV ''B'', sMV ''Text8''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_7_1_T+where "isoiec_9798_3_7_1_T =+ [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sMV ''Rpa'', sMV ''B'',+ PAsymPK ( sMV ''B'' ), sMV ''Text4''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sMV ''Rb'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ]"++role isoiec_9798_3_7_2_A+where "isoiec_9798_3_7_2_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',+ sPK ''A'', sMV ''B'', sMV ''pkB'', sMV ''TokenTA''+ |>+ , Send ''check_3_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'' |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_3_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sN ''Rpa'', sMV ''Rb'',+ sAV ''A'', sMV ''pkA'', sMV ''B'', sMV ''pkB'', sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',+ sAV ''T'', sMV ''TokenTA'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sMV ''Rb'', sN ''Ra'',+ sMV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sN ''Ra'', sMV ''Rb'',+ sAV ''A'', sMV ''B'', sMV ''Text8''+ |>+ ( sMV ''pkB'' )+ |>+ ]"++role isoiec_9798_3_7_2_B+where "isoiec_9798_3_7_2_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sN ''Rb'',+ sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sMV ''pkA'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sMV ''Ra'', sN ''Rb'',+ sAV ''A'', sAV ''B'', sMV ''Text8''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_7_2_T+where "isoiec_9798_3_7_2_T =+ [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sMV ''Rb'',+ sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ]"++protocol isoiec_9798_3+where "isoiec_9798_3 =+{ isoiec_9798_3_1_A, isoiec_9798_3_1_B, isoiec_9798_3_2_A,+ isoiec_9798_3_2_B, isoiec_9798_3_3_A, isoiec_9798_3_3_B,+ isoiec_9798_3_4_A, isoiec_9798_3_4_B, isoiec_9798_3_5_A,+ isoiec_9798_3_5_B, isoiec_9798_3_6_1_A, isoiec_9798_3_6_1_B,+ isoiec_9798_3_6_1_T, isoiec_9798_3_6_2_A, isoiec_9798_3_6_2_B,+ isoiec_9798_3_6_2_T, isoiec_9798_3_7_1_A, isoiec_9798_3_7_1_B,+ isoiec_9798_3_7_1_T, isoiec_9798_3_7_2_A, isoiec_9798_3_7_2_B,+ isoiec_9798_3_7_2_T+}"++locale restricted_isoiec_9798_3_state = isoiec_9798_3_state++type_invariant isoiec_9798_3_composed_typing for isoiec_9798_3+where "isoiec_9798_3_composed_typing = mk_typing+ [ ((isoiec_9798_3_1_B, ''A''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_3_B, ''A''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_5_B, ''A''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_6_1_B, ''A''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_1_T, ''A''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_2_B, ''A''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_6_2_T, ''A''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_7_1_T, ''A''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_2_T, ''A''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_2_A, ''B''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_4_A, ''B''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_6_1_T, ''B''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_2_T, ''B''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_7_1_A, ''B''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_T, ''B''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_2_A, ''B''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_T, ''B''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_4_B, ''RA''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_5_B, ''RA''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_4_A, ''RB''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_5_A, ''RB''), (KnownT isoiec_9798_3_5_A_2))+ , ((isoiec_9798_3_2_B, ''Ra''), (KnownT isoiec_9798_3_2_B_2))+ , ((isoiec_9798_3_6_1_B, ''Ra''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_2_B, ''Ra''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_7_1_B, ''Ra''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_2_B, ''Ra''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_2_A, ''Rb''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_6_1_A, ''Rb''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_1_T, ''Rb''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_2_A, ''Rb''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_T, ''Rb''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_7_1_A, ''Rb''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_T, ''Rb''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_2_A, ''Rb''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_T, ''Rb''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_6_1_T, ''Rpa''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_2_B, ''Rpa''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_T, ''Rpa''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_7_1_B, ''Rpa''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_T, ''Rpa''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_2_B, ''Rpa''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_T, ''Rpa''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_6_1_B, ''T''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_2_B, ''T''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_7_1_B, ''T''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_2_B, ''T''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_1_B, ''TNA''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_3_B, ''TNA''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_3_A, ''TNB''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_1_A, ''Text1''), (KnownT isoiec_9798_3_1_A_text_1))+ , ((isoiec_9798_3_1_B, ''Text1''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_2_A, ''Text1''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_2_B, ''Text1''), (KnownT isoiec_9798_3_2_B_text_1))+ , ((isoiec_9798_3_3_A, ''Text1''), (KnownT isoiec_9798_3_3_A_text_1))+ , ((isoiec_9798_3_3_B, ''Text1''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_4_A, ''Text1''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_4_B, ''Text1''), (KnownT isoiec_9798_3_4_B_text_1))+ , ((isoiec_9798_3_5_A, ''Text1''), (KnownT isoiec_9798_3_5_A_text_1))+ , ((isoiec_9798_3_5_B, ''Text1''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_6_1_A, ''Text1''), (KnownT isoiec_9798_3_6_1_A_text_1))+ , ((isoiec_9798_3_6_1_B, ''Text1''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_2_A, ''Text1''), (KnownT isoiec_9798_3_6_2_A_text_1))+ , ((isoiec_9798_3_6_2_B, ''Text1''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_7_1_A, ''Text1''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_B, ''Text1''), (KnownT isoiec_9798_3_7_1_B_text_1))+ , ((isoiec_9798_3_7_2_A, ''Text1''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_B, ''Text1''), (KnownT isoiec_9798_3_7_2_B_text_1))+ , ((isoiec_9798_3_1_A, ''Text2''), (KnownT isoiec_9798_3_1_A_text_1))+ , ((isoiec_9798_3_1_B, ''Text2''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_2_A, ''Text2''), (KnownT isoiec_9798_3_2_A_text_2))+ , ((isoiec_9798_3_2_B, ''Text2''), (KnownT isoiec_9798_3_2_B_2))+ , ((isoiec_9798_3_3_A, ''Text2''), (KnownT isoiec_9798_3_3_A_text_1))+ , ((isoiec_9798_3_3_B, ''Text2''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_4_A, ''Text2''), (KnownT isoiec_9798_3_4_A_text_2))+ , ((isoiec_9798_3_4_B, ''Text2''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_5_A, ''Text2''), (KnownT isoiec_9798_3_5_A_2))+ , ((isoiec_9798_3_5_B, ''Text2''), (KnownT isoiec_9798_3_5_B_text_2))+ , ((isoiec_9798_3_6_1_A, ''Text2''),+ (KnownT isoiec_9798_3_6_1_A_check_4_in))+ , ((isoiec_9798_3_6_1_B, ''Text2''), (KnownT isoiec_9798_3_6_1_B_text_2))+ , ((isoiec_9798_3_6_2_A, ''Text2''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''Text2''), (KnownT isoiec_9798_3_6_2_B_text_2))+ , ((isoiec_9798_3_7_1_A, ''Text2''), (KnownT isoiec_9798_3_7_1_A_text_2))+ , ((isoiec_9798_3_7_1_T, ''Text2''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_2_A, ''Text2''), (KnownT isoiec_9798_3_7_2_A_text_2))+ , ((isoiec_9798_3_7_2_T, ''Text2''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_2_A, ''Text3''), (KnownT isoiec_9798_3_2_A_text_2))+ , ((isoiec_9798_3_2_B, ''Text3''), (KnownT isoiec_9798_3_2_B_2))+ , ((isoiec_9798_3_3_A, ''Text3''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_3_B, ''Text3''), (KnownT isoiec_9798_3_3_B_text_2))+ , ((isoiec_9798_3_4_A, ''Text3''), (KnownT isoiec_9798_3_4_A_text_2))+ , ((isoiec_9798_3_4_B, ''Text3''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_5_A, ''Text3''), (KnownT isoiec_9798_3_5_A_text_4))+ , ((isoiec_9798_3_5_B, ''Text3''), (KnownT isoiec_9798_3_5_B_4))+ , ((isoiec_9798_3_6_1_A, ''Text3''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_1_B, ''Text3''), (KnownT isoiec_9798_3_6_1_B_text_2))+ , ((isoiec_9798_3_6_2_A, ''Text3''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_B, ''Text3''), (KnownT isoiec_9798_3_6_2_B_text_2))+ , ((isoiec_9798_3_7_1_B, ''Text3''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_T, ''Text3''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_7_2_A, ''Text3''),+ (KnownT isoiec_9798_3_7_2_A_check_3_in))+ , ((isoiec_9798_3_7_2_B, ''Text3''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_T, ''Text3''), (KnownT isoiec_9798_3_7_2_T_text_3))+ , ((isoiec_9798_3_3_A, ''Text4''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_3_B, ''Text4''), (KnownT isoiec_9798_3_3_B_text_2))+ , ((isoiec_9798_3_4_A, ''Text4''), (KnownT isoiec_9798_3_4_A_3))+ , ((isoiec_9798_3_4_B, ''Text4''), (KnownT isoiec_9798_3_4_B_text_3))+ , ((isoiec_9798_3_5_A, ''Text4''), (KnownT isoiec_9798_3_5_A_text_4))+ , ((isoiec_9798_3_5_B, ''Text4''), (KnownT isoiec_9798_3_5_B_4))+ , ((isoiec_9798_3_6_1_A, ''Text4''), (KnownT isoiec_9798_3_6_1_A_text_3))+ , ((isoiec_9798_3_6_1_T, ''Text4''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_2_A, ''Text4''), (KnownT isoiec_9798_3_6_2_A_text_3))+ , ((isoiec_9798_3_6_2_T, ''Text4''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_7_1_A, ''Text4''), (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_1_T, ''Text4''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_4_A, ''Text5''), (KnownT isoiec_9798_3_4_A_3))+ , ((isoiec_9798_3_4_B, ''Text5''), (KnownT isoiec_9798_3_4_B_text_3))+ , ((isoiec_9798_3_5_A, ''Text5''), (KnownT isoiec_9798_3_5_A_3))+ , ((isoiec_9798_3_5_B, ''Text5''), (KnownT isoiec_9798_3_5_B_text_3))+ , ((isoiec_9798_3_6_1_B, ''Text5''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_T, ''Text5''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_6_2_A, ''Text5''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''Text5''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_T, ''Text5''), (KnownT isoiec_9798_3_6_2_T_text_4))+ , ((isoiec_9798_3_7_1_A, ''Text5''), (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_1_T, ''Text5''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_7_2_A, ''Text5''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_7_2_T, ''Text5''), (KnownT isoiec_9798_3_7_2_T_text_3))+ , ((isoiec_9798_3_5_A, ''Text6''), (KnownT isoiec_9798_3_5_A_3))+ , ((isoiec_9798_3_5_B, ''Text6''), (KnownT isoiec_9798_3_5_B_text_3))+ , ((isoiec_9798_3_6_1_A, ''Text6''), (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_1_T, ''Text6''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_7_1_A, ''Text6''), (KnownT isoiec_9798_3_7_1_A_text_4))+ , ((isoiec_9798_3_7_1_B, ''Text6''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_2_A, ''Text6''), (KnownT isoiec_9798_3_7_2_A_text_4))+ , ((isoiec_9798_3_7_2_B, ''Text6''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_6_1_A, ''Text7''), (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_1_T, ''Text7''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_6_2_A, ''Text7''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_6_2_T, ''Text7''), (KnownT isoiec_9798_3_6_2_T_text_4))+ , ((isoiec_9798_3_7_1_A, ''Text7''), (KnownT isoiec_9798_3_7_1_A_text_4))+ , ((isoiec_9798_3_7_2_A, ''Text7''), (KnownT isoiec_9798_3_7_2_A_text_4))+ , ((isoiec_9798_3_6_1_A, ''Text8''), (KnownT isoiec_9798_3_6_1_A_text_5))+ , ((isoiec_9798_3_6_1_B, ''Text8''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_2_A, ''Text8''), (KnownT isoiec_9798_3_6_2_A_text_5))+ , ((isoiec_9798_3_6_2_B, ''Text8''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_7_1_A, ''Text8''), (KnownT isoiec_9798_3_7_1_A_5))+ , ((isoiec_9798_3_7_1_B, ''Text8''), (KnownT isoiec_9798_3_7_1_B_text_5))+ , ((isoiec_9798_3_7_2_A, ''Text8''), (KnownT isoiec_9798_3_7_2_A_5))+ , ((isoiec_9798_3_7_2_B, ''Text8''), (KnownT isoiec_9798_3_7_2_B_text_5))+ , ((isoiec_9798_3_6_1_A, ''Text9''), (KnownT isoiec_9798_3_6_1_A_text_5))+ , ((isoiec_9798_3_6_1_B, ''Text9''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_2_A, ''Text9''), (KnownT isoiec_9798_3_6_2_A_text_5))+ , ((isoiec_9798_3_6_2_B, ''Text9''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_7_1_A, ''Text9''), (KnownT isoiec_9798_3_7_1_A_5))+ , ((isoiec_9798_3_7_1_B, ''Text9''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_2_A, ''Text9''), (KnownT isoiec_9798_3_7_2_A_5))+ , ((isoiec_9798_3_7_2_B, ''Text9''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_6_1_A, ''TokenBA''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_2_A, ''TokenBA''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_A, ''TokenTA''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_7_2_A, ''TokenTA''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_6_1_A, ''TokenTA_for_B''),+ (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_7_1_A, ''TokenTA_for_B''),+ (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_6_1_B, ''pkA''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_2_A, ''pkA''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''pkA''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_7_1_B, ''pkA''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_2_A, ''pkA''),+ (KnownT isoiec_9798_3_7_2_A_check_3_in))+ , ((isoiec_9798_3_7_2_B, ''pkA''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_6_1_A, ''pkB''), (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_2_A, ''pkB''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_6_2_B, ''pkB''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_7_1_A, ''pkB''), (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_2_A, ''pkB''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_7_2_B, ''pkB''), (KnownT isoiec_9798_3_7_2_B_4))+ ]"++sublocale isoiec_9798_3_state < isoiec_9798_3_composed_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_composed_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_composed_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_composed_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_composed_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_1_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_1_B"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_1_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_1_A &+ ( tid1, isoiec_9798_3_1_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_1_sig_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_2_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_2_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_2_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_2_A &+ ( tid1, isoiec_9798_3_2_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_2_sig_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_3_A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_3_A"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_3_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_3_B &+ ( tid1, isoiec_9798_3_3_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_3_sig_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_3_B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_3_B"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_3_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_3_A &+ ( tid1, isoiec_9798_3_3_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_3_sig_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_4_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_4_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_4_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_4_B &+ ( tid1, isoiec_9798_3_4_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(AV ''A'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_4_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_4_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_4_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_4_A &+ ( tid1, isoiec_9798_3_4_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_5_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_5_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_5_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_5_B &+ ( tid1, isoiec_9798_3_5_B_3 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text5'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_1'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(AV ''A'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_5_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_5_B &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_5_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_5_A &+ ( tid1, isoiec_9798_3_5_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text3'' tid1), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text3'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_2'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_1'', LN ''RB'' tid0, LN ''RA'' tid1,+ s(AV ''A'' tid1), s(MV ''Text5'' tid1)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_B &+ ( tid1, isoiec_9798_3_6_1_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_B &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_A &+ ( tid1, isoiec_9798_3_6_1_A_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text8'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,+ s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_5'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_T &+ ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &+ {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text6'' tid1)+ |} = {| s(AV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,+ s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_1_B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_T &+ ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),+ PK ( s(MV ''A'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,+ s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,+ s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_B &+ ( tid1, isoiec_9798_3_6_2_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_B &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_A &+ ( tid1, isoiec_9798_3_6_2_A_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text8'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_5'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_T &+ ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''T'' tid0),+ LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_6_2_B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_T &+ ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),+ s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_B &+ ( tid1, isoiec_9798_3_7_1_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_5'', LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_A &+ ( tid1, isoiec_9798_3_7_1_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,+ s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_4'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),+ s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_T &+ ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &+ {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text4'' tid1)+ |} = {| s(MV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,+ s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_1_B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_T &+ ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),+ PK ( s(MV ''A'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,+ s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,+ s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_B &+ ( tid1, isoiec_9798_3_7_2_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_5'', LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_A &+ ( tid1, isoiec_9798_3_7_2_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_4'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),+ s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_T &+ ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''T'' tid0),+ LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_7_2_B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_T &+ ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),+ s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy view
@@ -1,6 +1,6 @@ theory "isoiec-9798-4-bdkey_cert_auto" imports- "../ESPLogic"+ "ESPLogic" begin role isoiec_9798_4_1_bdkey_A@@ -214,217 +214,217 @@ then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_1_B t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_1_B t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_bdkey_composed_typing_state t r s" by unfold_locales auto qed@@ -504,41 +504,61 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_1_bdkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed -lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_2_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_2_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_2_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_2_bdkey_A &- ( tid1, isoiec_9798_4_2_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_2_bdkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_2_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_2_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_2_bdkey_A &+ ( tid1, isoiec_9798_4_2_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_3_bdkey_A_non_injective_agreement:@@ -564,11 +584,11 @@ s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_B_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_3_bdkey_B_non_injective_agreement:@@ -594,100 +614,140 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed -lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_4_bdkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_bdkey_B &- ( tid1, isoiec_9798_4_4_bdkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_4_bdkey_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_bdkey_B &+ ( tid1, isoiec_9798_4_4_bdkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,- s(MV ''Text4'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid1) )- ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,+ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next- case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts+ case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid1) )+ ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_4_bdkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_bdkey_A &+ ( tid1, isoiec_9798_4_4_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next- case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_4_bdkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_bdkey_A &- ( tid1, isoiec_9798_4_4_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy view
@@ -1,6 +1,6 @@ theory "isoiec-9798-4-udkey_cert_auto" imports- "../ESPLogic"+ "ESPLogic" begin role isoiec_9798_4_1_udkey_A@@ -212,217 +212,217 @@ then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_1_B t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_text_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_1_B t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_udkey_composed_typing_state t r s" by unfold_locales auto qed@@ -501,40 +501,60 @@ LC ''isoiec_9798_4_1_ccf_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_1_udkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed -lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_2_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_2_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_2_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_2_udkey_A &- ( tid1, isoiec_9798_4_2_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_2_udkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_2_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_2_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_2_udkey_A &+ ( tid1, isoiec_9798_4_2_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_3_udkey_A_non_injective_agreement:@@ -559,11 +579,11 @@ LC ''isoiec_9798_4_3_ccf_2'', s(MV ''TNb'' tid0), s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_B_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_3_udkey_B_non_injective_agreement:@@ -588,81 +608,121 @@ LC ''isoiec_9798_4_3_ccf_1'', s(MV ''TNa'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed -lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_4_udkey_A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_udkey_B &- ( tid1, isoiec_9798_4_4_udkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_4_udkey_A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_udkey_B &+ ( tid1, isoiec_9798_4_4_udkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,- s(MV ''Text4'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,+ s(MV ''Text4'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed -lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_4_udkey_B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_udkey_A &- ( tid1, isoiec_9798_4_4_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_4_udkey_B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_udkey_A &+ ( tid1, isoiec_9798_4_4_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy view
@@ -1,3702 +1,4002 @@ theory "isoiec-9798-2-bdkey_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_2_1_bdkey_A-where "isoiec_9798_2_1_bdkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- ]"--role isoiec_9798_2_1_bdkey_B-where "isoiec_9798_2_1_bdkey_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (MVar ''A'') (AVar ''B'') )- |>- ]"--protocol isoiec_9798_2_1_bdkey-where "isoiec_9798_2_1_bdkey =-{ isoiec_9798_2_1_bdkey_A, isoiec_9798_2_1_bdkey_B }"--locale restricted_isoiec_9798_2_1_bdkey_state = isoiec_9798_2_1_bdkey_state--type_invariant isoiec_9798_2_1_bdkey_msc_typing for isoiec_9798_2_1_bdkey-where "isoiec_9798_2_1_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_1_bdkey_B, ''A''), (KnownT isoiec_9798_2_1_bdkey_B_1))- , ((isoiec_9798_2_1_bdkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_1_bdkey_B_1) (NonceT isoiec_9798_2_1_bdkey_A ''TNA'')))- , ((isoiec_9798_2_1_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_1_bdkey_A_text_1))- , ((isoiec_9798_2_1_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_1_bdkey_B_1))- , ((isoiec_9798_2_1_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_1_bdkey_A_text_1))- , ((isoiec_9798_2_1_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_1_bdkey_B_1))- ]"--sublocale isoiec_9798_2_1_bdkey_state < isoiec_9798_2_1_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_1_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_1_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_1_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_1_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_1_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_1_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_1_bdkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_1_bdkey_A &- ( tid1, isoiec_9798_2_1_bdkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_2_bdkey_A-where "isoiec_9798_2_2_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''A'') )- |>- ]"--role isoiec_9798_2_2_bdkey_B-where "isoiec_9798_2_2_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sAV ''B'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (AVar ''A'') )- |>- ]"--protocol isoiec_9798_2_2_bdkey-where "isoiec_9798_2_2_bdkey =-{ isoiec_9798_2_2_bdkey_A, isoiec_9798_2_2_bdkey_B }"--locale restricted_isoiec_9798_2_2_bdkey_state = isoiec_9798_2_2_bdkey_state--type_invariant isoiec_9798_2_2_bdkey_msc_typing for isoiec_9798_2_2_bdkey-where "isoiec_9798_2_2_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_2_bdkey_A, ''B''), (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_2_bdkey_A, ''RB''), (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_2_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_2_bdkey_A_1))- , ((isoiec_9798_2_2_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_2_bdkey_B_text_1))- , ((isoiec_9798_2_2_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_2_bdkey_A_text_2))- , ((isoiec_9798_2_2_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_2_bdkey_B_2))- , ((isoiec_9798_2_2_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_2_bdkey_A_text_2))- , ((isoiec_9798_2_2_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_2_bdkey_B_2))- ]"--sublocale isoiec_9798_2_2_bdkey_state < isoiec_9798_2_2_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_2_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_2_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_2_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_2_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_2_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_2_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_2_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_2_bdkey_A &- ( tid1, isoiec_9798_2_2_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_3_bdkey_A-where "isoiec_9798_2_3_bdkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sAV ''A'',- sMV ''Text3''- |>- ( sKbd (AVar ''B'') (AVar ''A'') )- |>- ]"--role isoiec_9798_2_3_bdkey_B-where "isoiec_9798_2_3_bdkey_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sKbd (MVar ''A'') (AVar ''B'') )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''A'',- sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''A'') )- |>- ]"--protocol isoiec_9798_2_3_bdkey-where "isoiec_9798_2_3_bdkey =-{ isoiec_9798_2_3_bdkey_A, isoiec_9798_2_3_bdkey_B }"--locale restricted_isoiec_9798_2_3_bdkey_state = isoiec_9798_2_3_bdkey_state--type_invariant isoiec_9798_2_3_bdkey_msc_typing for isoiec_9798_2_3_bdkey-where "isoiec_9798_2_3_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_3_bdkey_B, ''A''), (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_3_bdkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_3_bdkey_B_1) (NonceT isoiec_9798_2_3_bdkey_A ''TNA'')))- , ((isoiec_9798_2_3_bdkey_A, ''TNB''),- (SumT (KnownT isoiec_9798_2_3_bdkey_A_2) (NonceT isoiec_9798_2_3_bdkey_B ''TNB'')))- , ((isoiec_9798_2_3_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_3_bdkey_A_text_1))- , ((isoiec_9798_2_3_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_3_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_3_bdkey_A_text_1))- , ((isoiec_9798_2_3_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_3_bdkey_B_1))- , ((isoiec_9798_2_3_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_3_bdkey_A_2))- , ((isoiec_9798_2_3_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_3_bdkey_B_text_2))- , ((isoiec_9798_2_3_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_3_bdkey_A_2))- , ((isoiec_9798_2_3_bdkey_B, ''Text4''),- (KnownT isoiec_9798_2_3_bdkey_B_text_2))- ]"--sublocale isoiec_9798_2_3_bdkey_state < isoiec_9798_2_3_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_3_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_3_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_3_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_3_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_3_bdkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_bdkey_B &- ( tid1, isoiec_9798_2_3_bdkey_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_3_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_bdkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_bdkey_A &- ( tid1, isoiec_9798_2_3_bdkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_4_bdkey_A-where "isoiec_9798_2_4_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sKbd (AVar ''A'') (MVar ''B'') )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',- sMV ''Text4''- |>- ( sKbd (AVar ''A'') (MVar ''B'') )- |>- ]"--role isoiec_9798_2_4_bdkey_B-where "isoiec_9798_2_4_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text2''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',- sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''B'') )- |>- ]"--protocol isoiec_9798_2_4_bdkey-where "isoiec_9798_2_4_bdkey =-{ isoiec_9798_2_4_bdkey_A, isoiec_9798_2_4_bdkey_B }"--locale restricted_isoiec_9798_2_4_bdkey_state = isoiec_9798_2_4_bdkey_state--type_invariant isoiec_9798_2_4_bdkey_msc_typing for isoiec_9798_2_4_bdkey-where "isoiec_9798_2_4_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_4_bdkey_A, ''B''), (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_B, ''RA''),- (SumT (KnownT isoiec_9798_2_4_bdkey_B_2) (NonceT isoiec_9798_2_4_bdkey_A ''RA'')))- , ((isoiec_9798_2_4_bdkey_A, ''RB''), (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_4_bdkey_A_1))- , ((isoiec_9798_2_4_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_4_bdkey_B_text_1))- , ((isoiec_9798_2_4_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_4_bdkey_A_text_2))- , ((isoiec_9798_2_4_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_4_bdkey_B_2))- , ((isoiec_9798_2_4_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_4_bdkey_A_text_2))- , ((isoiec_9798_2_4_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_4_bdkey_B_2))- , ((isoiec_9798_2_4_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_4_bdkey_A_3))- , ((isoiec_9798_2_4_bdkey_B, ''Text4''),- (KnownT isoiec_9798_2_4_bdkey_B_text_3))- , ((isoiec_9798_2_4_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_4_bdkey_A_3))- , ((isoiec_9798_2_4_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_4_bdkey_B_text_3))- ]"--sublocale isoiec_9798_2_4_bdkey_state < isoiec_9798_2_4_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_4_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_4_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_4_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_4_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_4_bdkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_bdkey_B &- ( tid1, isoiec_9798_2_4_bdkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid1) )- ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''A'' tid0), s(MV ''Text2'' tid1)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_4_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_bdkey_A &- ( tid1, isoiec_9798_2_4_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_5_bdkey_A-where "isoiec_9798_2_5_bdkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',- sAV ''A'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_bdkey_B-where "isoiec_9798_2_5_bdkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',- sMV ''A'', sAV ''B'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_bdkey_P-where "isoiec_9798_2_5_bdkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--protocol isoiec_9798_2_5_bdkey-where "isoiec_9798_2_5_bdkey =-{ isoiec_9798_2_5_bdkey_A, isoiec_9798_2_5_bdkey_B,- isoiec_9798_2_5_bdkey_P-}"--locale restricted_isoiec_9798_2_5_bdkey_state = isoiec_9798_2_5_bdkey_state--type_invariant isoiec_9798_2_5_bdkey_msc_typing for isoiec_9798_2_5_bdkey-where "isoiec_9798_2_5_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_5_bdkey_B, ''A''), (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_P, ''A''), (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_bdkey_P, ''B''), (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_bdkey_A_2) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_bdkey_B, ''P''), (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_A ''TNa'')))- , ((isoiec_9798_2_5_bdkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_bdkey_A_4) (NonceT isoiec_9798_2_5_bdkey_B ''TNb'')))- , ((isoiec_9798_2_5_bdkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''TNp'')))- , ((isoiec_9798_2_5_bdkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_bdkey_A_text_1))- , ((isoiec_9798_2_5_bdkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_bdkey_P_1))- , ((isoiec_9798_2_5_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- , ((isoiec_9798_2_5_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- , ((isoiec_9798_2_5_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_bdkey_P_text_2))- , ((isoiec_9798_2_5_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_bdkey_A_text_3))- , ((isoiec_9798_2_5_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_bdkey_A_text_3))- , ((isoiec_9798_2_5_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_bdkey_B_3))- , ((isoiec_9798_2_5_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_bdkey_A_4))- , ((isoiec_9798_2_5_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_bdkey_B_text_4))- , ((isoiec_9798_2_5_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_bdkey_A_4))- , ((isoiec_9798_2_5_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_bdkey_B_text_4))- , ((isoiec_9798_2_5_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_bdkey_A_2))- ]"--sublocale isoiec_9798_2_5_bdkey_state < isoiec_9798_2_5_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_5_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_5_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_5_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_5_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_5_bdkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_B &- ( tid1, isoiec_9798_2_5_bdkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(AV ''B'' tid2), s(MV ''Text2'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid0), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,- s(AV ''A'' tid3), s(AV ''B'' tid0), s(MV ''Text3'' tid3)- |}- ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_A &- ( tid1, isoiec_9798_2_5_bdkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &- ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &- ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_6_bdkey_A-where "isoiec_9798_2_6_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',- sAV ''A'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_bdkey_B-where "isoiec_9798_2_6_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',- sAV ''A'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_bdkey_P-where "isoiec_9798_2_6_bdkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',- sMV ''A'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--protocol isoiec_9798_2_6_bdkey-where "isoiec_9798_2_6_bdkey =-{ isoiec_9798_2_6_bdkey_A, isoiec_9798_2_6_bdkey_B,- isoiec_9798_2_6_bdkey_P-}"--locale restricted_isoiec_9798_2_6_bdkey_state = isoiec_9798_2_6_bdkey_state--type_invariant isoiec_9798_2_6_bdkey_msc_typing for isoiec_9798_2_6_bdkey-where "isoiec_9798_2_6_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_6_bdkey_P, ''A''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_A, ''B''), (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_P, ''B''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_bdkey_A_3) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_bdkey_B, ''P''), (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_bdkey_P, ''Ra''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_A, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_P, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_A ''Rpa'')))- , ((isoiec_9798_2_6_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_bdkey_A_1))- , ((isoiec_9798_2_6_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_bdkey_B_text_1))- , ((isoiec_9798_2_6_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_bdkey_A_text_2))- , ((isoiec_9798_2_6_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_bdkey_P_2))- , ((isoiec_9798_2_6_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- , ((isoiec_9798_2_6_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- , ((isoiec_9798_2_6_bdkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_bdkey_P_text_3))- , ((isoiec_9798_2_6_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_bdkey_A_text_4))- , ((isoiec_9798_2_6_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_bdkey_A_text_4))- , ((isoiec_9798_2_6_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_bdkey_B_4))- , ((isoiec_9798_2_6_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_bdkey_A_5))- , ((isoiec_9798_2_6_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_bdkey_B_text_5))- , ((isoiec_9798_2_6_bdkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_bdkey_A_5))- , ((isoiec_9798_2_6_bdkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_bdkey_B_text_5))- , ((isoiec_9798_2_6_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_bdkey_A_3))- ]"--sublocale isoiec_9798_2_6_bdkey_state < isoiec_9798_2_6_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_6_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_6_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_6_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_6_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_6_bdkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_B &- ( tid1, isoiec_9798_2_6_bdkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(AV ''B'' tid2), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,- s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_A &- ( tid1, isoiec_9798_2_6_bdkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &- ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &- ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),- s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_5_special_TTP_bdkey_A-where "isoiec_9798_2_5_special_TTP_bdkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sN ''TVPa'',- sMV ''Kab'', sAV ''B'', sMV ''Text3''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_special_TTP_bdkey_B-where "isoiec_9798_2_5_special_TTP_bdkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sMV ''TNp'',- sMV ''Kab'', sMV ''A'', sMV ''Text2''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_special_TTP_bdkey_P-where "isoiec_9798_2_5_special_TTP_bdkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sMV ''TVPa'',- sN ''Kab'', sMV ''B'', sMV ''Text3''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sN ''TNp'',- sN ''Kab'', sMV ''A'', sMV ''Text2''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--protocol isoiec_9798_2_5_special_TTP_bdkey-where "isoiec_9798_2_5_special_TTP_bdkey =-{ isoiec_9798_2_5_special_TTP_bdkey_A,- isoiec_9798_2_5_special_TTP_bdkey_B, isoiec_9798_2_5_special_TTP_bdkey_P-}"--locale restricted_isoiec_9798_2_5_special_TTP_bdkey_state = isoiec_9798_2_5_special_TTP_bdkey_state +- assumes different_actors_A_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A;- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''A'' tid0)- |] ==> False"--type_invariant isoiec_9798_2_5_special_TTP_bdkey_msc_typing for isoiec_9798_2_5_special_TTP_bdkey-where "isoiec_9798_2_5_special_TTP_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_5_special_TTP_bdkey_B, ''A''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''A''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''B''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''P''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_A ''TNa'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4) (NonceT isoiec_9798_2_5_special_TTP_bdkey_B ''TNb'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''TNp'')))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))- , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))- ]"--sublocale isoiec_9798_2_5_special_TTP_bdkey_state < isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_5_special_TTP_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_5_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_5_special_TTP_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end---lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_B &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid2), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid3,- LN ''Kab'' tid1, s(AV ''B'' tid2), s(MV ''Text3'' tid3)- |}- ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_A &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: B_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid1,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid1)- |}- ( Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: B_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid2) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid2) )- ( s(MV ''A'' tid2) ) = Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- LN ''Kab'' tid2, s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid2,- LN ''Kab'' tid1, s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_6_special_TTP_bdkey_A-where "isoiec_9798_2_6_special_TTP_bdkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sN ''Ra'',- sMV ''Kab'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (AVar ''A'') (AVar ''P'') ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_special_TTP_bdkey_B-where "isoiec_9798_2_6_special_TTP_bdkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sN ''Rb'',- sMV ''Kab'', sAV ''A'', sMV ''Text3''- |>- ( sKbd (AVar ''B'') (MVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_special_TTP_bdkey_P-where "isoiec_9798_2_6_special_TTP_bdkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sMV ''Ra'',- sN ''Kab'', sMV ''B'', sMV ''Text4''- |>- ( sKbd (MVar ''A'') (AVar ''P'') ),- PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sMV ''Rb'',- sN ''Kab'', sMV ''A'', sMV ''Text3''- |>- ( sKbd (MVar ''B'') (AVar ''P'') )- |>- ]"--protocol isoiec_9798_2_6_special_TTP_bdkey-where "isoiec_9798_2_6_special_TTP_bdkey =-{ isoiec_9798_2_6_special_TTP_bdkey_A,- isoiec_9798_2_6_special_TTP_bdkey_B, isoiec_9798_2_6_special_TTP_bdkey_P-}"--locale restricted_isoiec_9798_2_6_special_TTP_bdkey_state = isoiec_9798_2_6_special_TTP_bdkey_state +- assumes different_actors_A_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A;- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''A'' tid0)- |] ==> False"- assumes different_actors_B_P:- "!! tid0 tid1.- [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B;- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;- s(AV ''P'' tid1) = s(AV ''B'' tid0)- |] ==> False"--type_invariant isoiec_9798_2_6_special_TTP_bdkey_msc_typing for isoiec_9798_2_6_special_TTP_bdkey-where "isoiec_9798_2_6_special_TTP_bdkey_msc_typing = mk_typing- [ ((isoiec_9798_2_6_special_TTP_bdkey_P, ''A''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''P''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Ra''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Rb''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Rb''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_A ''Rpa'')))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_1))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))- , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))- ]"--sublocale isoiec_9798_2_6_special_TTP_bdkey_state < isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_6_special_TTP_bdkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_6_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),- LN ''Rpa'' tid0, s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_6_special_TTP_bdkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end----lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_B &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),- LN ''Rpa'' tid0, s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid2,- LN ''Kab'' tid1, s(AV ''A'' tid2), s(MV ''Text3'' tid2)- |}- ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid3) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid0) )- ( s(MV ''B'' tid0) ) = Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', LN ''Rpa'' tid0,- LN ''Rb'' tid2, s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_A &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid2,- LN ''Kab'' tid1, s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid3) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid2) )- ( s(AV ''P'' tid2) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid1) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_A_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &- ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''P'' tid1) )- ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts- thus ?thesis by (fastsimp dest: different_actors_B_P intro: event_predOrdI)- next- case swapped note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (fastsimp+)?- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_2_1_bdkey_A+where "isoiec_9798_2_1_bdkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ ]"++role isoiec_9798_2_1_bdkey_B+where "isoiec_9798_2_1_bdkey_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (MVar ''A'') (AVar ''B'') )+ |>+ ]"++protocol isoiec_9798_2_1_bdkey+where "isoiec_9798_2_1_bdkey =+{ isoiec_9798_2_1_bdkey_A, isoiec_9798_2_1_bdkey_B }"++locale restricted_isoiec_9798_2_1_bdkey_state = isoiec_9798_2_1_bdkey_state++type_invariant isoiec_9798_2_1_bdkey_msc_typing for isoiec_9798_2_1_bdkey+where "isoiec_9798_2_1_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_1_bdkey_B, ''A''), (KnownT isoiec_9798_2_1_bdkey_B_1))+ , ((isoiec_9798_2_1_bdkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_1_bdkey_B_1) (NonceT isoiec_9798_2_1_bdkey_A ''TNA'')))+ , ((isoiec_9798_2_1_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_1_bdkey_A_text_1))+ , ((isoiec_9798_2_1_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_1_bdkey_B_1))+ , ((isoiec_9798_2_1_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_1_bdkey_A_text_1))+ , ((isoiec_9798_2_1_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_1_bdkey_B_1))+ ]"++sublocale isoiec_9798_2_1_bdkey_state < isoiec_9798_2_1_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_1_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_1_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_1_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_1_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_1_bdkey_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_1_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_1_bdkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_1_bdkey_A &+ ( tid1, isoiec_9798_2_1_bdkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_2_bdkey_A+where "isoiec_9798_2_2_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''A'') )+ |>+ ]"++role isoiec_9798_2_2_bdkey_B+where "isoiec_9798_2_2_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sAV ''B'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (AVar ''A'') )+ |>+ ]"++protocol isoiec_9798_2_2_bdkey+where "isoiec_9798_2_2_bdkey =+{ isoiec_9798_2_2_bdkey_A, isoiec_9798_2_2_bdkey_B }"++locale restricted_isoiec_9798_2_2_bdkey_state = isoiec_9798_2_2_bdkey_state++type_invariant isoiec_9798_2_2_bdkey_msc_typing for isoiec_9798_2_2_bdkey+where "isoiec_9798_2_2_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_2_bdkey_A, ''B''), (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_2_bdkey_A, ''RB''), (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_2_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_2_bdkey_A_1))+ , ((isoiec_9798_2_2_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_2_bdkey_B_text_1))+ , ((isoiec_9798_2_2_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_2_bdkey_A_text_2))+ , ((isoiec_9798_2_2_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_2_bdkey_B_2))+ , ((isoiec_9798_2_2_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_2_bdkey_A_text_2))+ , ((isoiec_9798_2_2_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_2_bdkey_B_2))+ ]"++sublocale isoiec_9798_2_2_bdkey_state < isoiec_9798_2_2_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_2_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_2_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_2_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_2_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_2_bdkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_2_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_2_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_2_bdkey_A &+ ( tid1, isoiec_9798_2_2_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_2_3_bdkey_A+where "isoiec_9798_2_3_bdkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sAV ''A'',+ sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (AVar ''A'') )+ |>+ ]"++role isoiec_9798_2_3_bdkey_B+where "isoiec_9798_2_3_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sKbd (MVar ''A'') (AVar ''B'') )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''A'',+ sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''A'') )+ |>+ ]"++protocol isoiec_9798_2_3_bdkey+where "isoiec_9798_2_3_bdkey =+{ isoiec_9798_2_3_bdkey_A, isoiec_9798_2_3_bdkey_B }"++locale restricted_isoiec_9798_2_3_bdkey_state = isoiec_9798_2_3_bdkey_state++type_invariant isoiec_9798_2_3_bdkey_msc_typing for isoiec_9798_2_3_bdkey+where "isoiec_9798_2_3_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_3_bdkey_B, ''A''), (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_3_bdkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_3_bdkey_B_1) (NonceT isoiec_9798_2_3_bdkey_A ''TNA'')))+ , ((isoiec_9798_2_3_bdkey_A, ''TNB''),+ (SumT (KnownT isoiec_9798_2_3_bdkey_A_2) (NonceT isoiec_9798_2_3_bdkey_B ''TNB'')))+ , ((isoiec_9798_2_3_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_3_bdkey_A_text_1))+ , ((isoiec_9798_2_3_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_3_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_3_bdkey_A_text_1))+ , ((isoiec_9798_2_3_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_3_bdkey_B_1))+ , ((isoiec_9798_2_3_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_3_bdkey_A_2))+ , ((isoiec_9798_2_3_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_3_bdkey_B_text_2))+ , ((isoiec_9798_2_3_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_3_bdkey_A_2))+ , ((isoiec_9798_2_3_bdkey_B, ''Text4''),+ (KnownT isoiec_9798_2_3_bdkey_B_text_2))+ ]"++sublocale isoiec_9798_2_3_bdkey_state < isoiec_9798_2_3_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_3_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_3_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_3_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_3_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_3_bdkey_state) A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_bdkey_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_bdkey_B &+ ( tid1, isoiec_9798_2_3_bdkey_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_3_bdkey_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_bdkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_bdkey_A &+ ( tid1, isoiec_9798_2_3_bdkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_4_bdkey_A+where "isoiec_9798_2_4_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (AVar ''A'') (MVar ''B'') )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',+ sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (MVar ''B'') )+ |>+ ]"++role isoiec_9798_2_4_bdkey_B+where "isoiec_9798_2_4_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',+ sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''B'') )+ |>+ ]"++protocol isoiec_9798_2_4_bdkey+where "isoiec_9798_2_4_bdkey =+{ isoiec_9798_2_4_bdkey_A, isoiec_9798_2_4_bdkey_B }"++locale restricted_isoiec_9798_2_4_bdkey_state = isoiec_9798_2_4_bdkey_state++type_invariant isoiec_9798_2_4_bdkey_msc_typing for isoiec_9798_2_4_bdkey+where "isoiec_9798_2_4_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_4_bdkey_A, ''B''), (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_B, ''RA''),+ (SumT (KnownT isoiec_9798_2_4_bdkey_B_2) (NonceT isoiec_9798_2_4_bdkey_A ''RA'')))+ , ((isoiec_9798_2_4_bdkey_A, ''RB''), (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_4_bdkey_A_1))+ , ((isoiec_9798_2_4_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_1))+ , ((isoiec_9798_2_4_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_4_bdkey_A_text_2))+ , ((isoiec_9798_2_4_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_4_bdkey_B_2))+ , ((isoiec_9798_2_4_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_4_bdkey_A_text_2))+ , ((isoiec_9798_2_4_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_4_bdkey_B_2))+ , ((isoiec_9798_2_4_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_4_bdkey_A_3))+ , ((isoiec_9798_2_4_bdkey_B, ''Text4''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_3))+ , ((isoiec_9798_2_4_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_4_bdkey_A_3))+ , ((isoiec_9798_2_4_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_4_bdkey_B_text_3))+ ]"++sublocale isoiec_9798_2_4_bdkey_state < isoiec_9798_2_4_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_4_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_4_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_4_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_4_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_4_bdkey_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_bdkey_B &+ ( tid1, isoiec_9798_2_4_bdkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid1) )+ ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_4_bdkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_bdkey_A &+ ( tid1, isoiec_9798_2_4_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_2_5_bdkey_A+where "isoiec_9798_2_5_bdkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',+ sAV ''A'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_bdkey_B+where "isoiec_9798_2_5_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',+ sMV ''A'', sAV ''B'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_bdkey_P+where "isoiec_9798_2_5_bdkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++protocol isoiec_9798_2_5_bdkey+where "isoiec_9798_2_5_bdkey =+{ isoiec_9798_2_5_bdkey_A, isoiec_9798_2_5_bdkey_B,+ isoiec_9798_2_5_bdkey_P+}"++locale restricted_isoiec_9798_2_5_bdkey_state = isoiec_9798_2_5_bdkey_state++type_invariant isoiec_9798_2_5_bdkey_msc_typing for isoiec_9798_2_5_bdkey+where "isoiec_9798_2_5_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_5_bdkey_B, ''A''), (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_P, ''A''), (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_bdkey_P, ''B''), (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_A_2) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_bdkey_B, ''P''), (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_A ''TNa'')))+ , ((isoiec_9798_2_5_bdkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_A_4) (NonceT isoiec_9798_2_5_bdkey_B ''TNb'')))+ , ((isoiec_9798_2_5_bdkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_bdkey_B_3) (NonceT isoiec_9798_2_5_bdkey_P ''TNp'')))+ , ((isoiec_9798_2_5_bdkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_1))+ , ((isoiec_9798_2_5_bdkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_bdkey_P_1))+ , ((isoiec_9798_2_5_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ , ((isoiec_9798_2_5_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ , ((isoiec_9798_2_5_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_bdkey_P_text_2))+ , ((isoiec_9798_2_5_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_3))+ , ((isoiec_9798_2_5_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_bdkey_A_text_3))+ , ((isoiec_9798_2_5_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_bdkey_B_3))+ , ((isoiec_9798_2_5_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_bdkey_A_4))+ , ((isoiec_9798_2_5_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_bdkey_B_text_4))+ , ((isoiec_9798_2_5_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_bdkey_A_4))+ , ((isoiec_9798_2_5_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_bdkey_B_text_4))+ , ((isoiec_9798_2_5_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_bdkey_A_2))+ ]"++sublocale isoiec_9798_2_5_bdkey_state < isoiec_9798_2_5_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_5_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_5_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_5_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_5_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_5_bdkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_bdkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_B &+ ( tid1, isoiec_9798_2_5_bdkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(AV ''B'' tid2), s(MV ''Text2'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid0), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,+ s(AV ''A'' tid3), s(AV ''B'' tid0), s(MV ''Text3'' tid3)+ |}+ ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_A &+ ( tid1, isoiec_9798_2_5_bdkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_bdkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &+ ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_bdkey_P &+ ( tid1, isoiec_9798_2_5_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_6_bdkey_A+where "isoiec_9798_2_6_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',+ sAV ''A'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_bdkey_B+where "isoiec_9798_2_6_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',+ sAV ''A'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_bdkey_P+where "isoiec_9798_2_6_bdkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',+ sMV ''A'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++protocol isoiec_9798_2_6_bdkey+where "isoiec_9798_2_6_bdkey =+{ isoiec_9798_2_6_bdkey_A, isoiec_9798_2_6_bdkey_B,+ isoiec_9798_2_6_bdkey_P+}"++locale restricted_isoiec_9798_2_6_bdkey_state = isoiec_9798_2_6_bdkey_state++type_invariant isoiec_9798_2_6_bdkey_msc_typing for isoiec_9798_2_6_bdkey+where "isoiec_9798_2_6_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_6_bdkey_P, ''A''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_A, ''B''), (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_P, ''B''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_A_3) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_bdkey_B, ''P''), (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_bdkey_P, ''Ra''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_A, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_P, ''Rb''), (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_bdkey_B_4) (NonceT isoiec_9798_2_6_bdkey_A ''Rpa'')))+ , ((isoiec_9798_2_6_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_bdkey_A_1))+ , ((isoiec_9798_2_6_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_1))+ , ((isoiec_9798_2_6_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_2))+ , ((isoiec_9798_2_6_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_bdkey_P_2))+ , ((isoiec_9798_2_6_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ , ((isoiec_9798_2_6_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ , ((isoiec_9798_2_6_bdkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_bdkey_P_text_3))+ , ((isoiec_9798_2_6_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_4))+ , ((isoiec_9798_2_6_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_bdkey_A_text_4))+ , ((isoiec_9798_2_6_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_bdkey_B_4))+ , ((isoiec_9798_2_6_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_bdkey_A_5))+ , ((isoiec_9798_2_6_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_5))+ , ((isoiec_9798_2_6_bdkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_bdkey_A_5))+ , ((isoiec_9798_2_6_bdkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_bdkey_B_text_5))+ , ((isoiec_9798_2_6_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_bdkey_A_3))+ ]"++sublocale isoiec_9798_2_6_bdkey_state < isoiec_9798_2_6_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_6_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_6_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_6_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_6_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_6_bdkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_B &+ ( tid1, isoiec_9798_2_6_bdkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(AV ''B'' tid2), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,+ s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_A &+ ( tid1, isoiec_9798_2_6_bdkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &+ ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_bdkey_P &+ ( tid1, isoiec_9798_2_6_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_2_5_special_TTP_bdkey_A+where "isoiec_9798_2_5_special_TTP_bdkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sN ''TVPa'',+ sMV ''Kab'', sAV ''B'', sMV ''Text3''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_special_TTP_bdkey_B+where "isoiec_9798_2_5_special_TTP_bdkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sMV ''TNp'',+ sMV ''Kab'', sMV ''A'', sMV ''Text2''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_special_TTP_bdkey_P+where "isoiec_9798_2_5_special_TTP_bdkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_1'', sMV ''TVPa'',+ sN ''Kab'', sMV ''B'', sMV ''Text3''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_5_special_TTP_enc_2_2'', sN ''TNp'',+ sN ''Kab'', sMV ''A'', sMV ''Text2''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++protocol isoiec_9798_2_5_special_TTP_bdkey+where "isoiec_9798_2_5_special_TTP_bdkey =+{ isoiec_9798_2_5_special_TTP_bdkey_A,+ isoiec_9798_2_5_special_TTP_bdkey_B, isoiec_9798_2_5_special_TTP_bdkey_P+}"++locale restricted_isoiec_9798_2_5_special_TTP_bdkey_state = isoiec_9798_2_5_special_TTP_bdkey_state ++ assumes different_actors_A_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A;+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''A'' tid0)+ |] ==> False"++type_invariant isoiec_9798_2_5_special_TTP_bdkey_msc_typing for isoiec_9798_2_5_special_TTP_bdkey+where "isoiec_9798_2_5_special_TTP_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_5_special_TTP_bdkey_B, ''A''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''A''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''B''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''P''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_A ''TNa'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4) (NonceT isoiec_9798_2_5_special_TTP_bdkey_B ''TNb'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3) (NonceT isoiec_9798_2_5_special_TTP_bdkey_P ''TNp'')))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_1))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_P_text_2))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_text_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_3))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_B_text_4))+ , ((isoiec_9798_2_5_special_TTP_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_special_TTP_bdkey_A_2))+ ]"++sublocale isoiec_9798_2_5_special_TTP_bdkey_state < isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_5_special_TTP_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_5_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_5_special_TTP_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end+++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_B &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid2), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid3,+ LN ''Kab'' tid1, s(AV ''B'' tid2), s(MV ''Text3'' tid3)+ |}+ ( Kbd ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: B_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid1,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid1)+ |}+ ( Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: B_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid2) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid2) )+ ( s(MV ''A'' tid2) ) = Kbd ( s(AV ''A'' tid1) ) ( s(AV ''P'' tid1) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ LN ''Kab'' tid2, s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_special_TTP_bdkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_special_TTP_bdkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_special_TTP_bdkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_5_special_TTP_bdkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid2,+ LN ''Kab'' tid1, s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_6_special_TTP_bdkey_A+where "isoiec_9798_2_6_special_TTP_bdkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sN ''Ra'',+ sMV ''Kab'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (AVar ''A'') (AVar ''P'') ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_special_TTP_bdkey_B+where "isoiec_9798_2_6_special_TTP_bdkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sN ''Rb'',+ sMV ''Kab'', sAV ''A'', sMV ''Text3''+ |>+ ( sKbd (AVar ''B'') (MVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_special_TTP_bdkey_P+where "isoiec_9798_2_6_special_TTP_bdkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_1'', sMV ''Ra'',+ sN ''Kab'', sMV ''B'', sMV ''Text4''+ |>+ ( sKbd (MVar ''A'') (AVar ''P'') ),+ PEnc <| sC ''isoiec_9798_2_6_special_TTP_enc_3_2'', sMV ''Rb'',+ sN ''Kab'', sMV ''A'', sMV ''Text3''+ |>+ ( sKbd (MVar ''B'') (AVar ''P'') )+ |>+ ]"++protocol isoiec_9798_2_6_special_TTP_bdkey+where "isoiec_9798_2_6_special_TTP_bdkey =+{ isoiec_9798_2_6_special_TTP_bdkey_A,+ isoiec_9798_2_6_special_TTP_bdkey_B, isoiec_9798_2_6_special_TTP_bdkey_P+}"++locale restricted_isoiec_9798_2_6_special_TTP_bdkey_state = isoiec_9798_2_6_special_TTP_bdkey_state ++ assumes different_actors_A_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A;+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''A'' tid0)+ |] ==> False"+ assumes different_actors_B_P:+ "!! tid0 tid1.+ [| roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B;+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P;+ s(AV ''P'' tid1) = s(AV ''B'' tid0)+ |] ==> False"++type_invariant isoiec_9798_2_6_special_TTP_bdkey_msc_typing for isoiec_9798_2_6_special_TTP_bdkey+where "isoiec_9798_2_6_special_TTP_bdkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_6_special_TTP_bdkey_P, ''A''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_P ''Kab'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''P''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Ra''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Rb''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Rb''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4) (NonceT isoiec_9798_2_6_special_TTP_bdkey_A ''Rpa'')))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_1))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_2))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_P_text_3))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_text_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_4))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_B_text_5))+ , ((isoiec_9798_2_6_special_TTP_bdkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_special_TTP_bdkey_A_3))+ ]"++sublocale isoiec_9798_2_6_special_TTP_bdkey_state < isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_6_special_TTP_bdkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_6_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),+ LN ''Rpa'' tid0, s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_6_special_TTP_bdkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0),+ LN ''Rpa'' tid0, s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid2,+ LN ''Kab'' tid1, s(AV ''A'' tid2), s(MV ''Text3'' tid2)+ |}+ ( Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid3) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid0) )+ ( s(MV ''B'' tid0) ) = Kbd ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', LN ''Rpa'' tid0,+ LN ''Rb'' tid2, s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid2,+ LN ''Kab'' tid1, s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( Kbd ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid3) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid2) )+ ( s(AV ''P'' tid2) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid1) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''A'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_special_TTP_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_special_TTP_bdkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_special_TTP_bdkey_P &+ ( tid1, isoiec_9798_2_6_special_TTP_bdkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''P'' tid1) )+ ( s(MV ''B'' tid1) ) = Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis by (fastforce dest: different_actors_B_P intro: event_predOrdI)+ next+ case swapped note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy view
@@ -1,2190 +1,2370 @@ theory "isoiec-9798-2-udkey_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_2_1_udkey_A-where "isoiec_9798_2_1_udkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sMV ''Text1'' |>- ( sK ''A'' ''B'' )- |>- ]"--role isoiec_9798_2_1_udkey_B-where "isoiec_9798_2_1_udkey_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sMV ''Text1'' |>- ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )- |>- ]"--protocol isoiec_9798_2_1_udkey-where "isoiec_9798_2_1_udkey =-{ isoiec_9798_2_1_udkey_A, isoiec_9798_2_1_udkey_B }"--locale restricted_isoiec_9798_2_1_udkey_state = isoiec_9798_2_1_udkey_state--type_invariant isoiec_9798_2_1_udkey_msc_typing for isoiec_9798_2_1_udkey-where "isoiec_9798_2_1_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_1_udkey_B, ''A''), (KnownT isoiec_9798_2_1_udkey_B_1))- , ((isoiec_9798_2_1_udkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_1_udkey_B_1) (NonceT isoiec_9798_2_1_udkey_A ''TNA'')))- , ((isoiec_9798_2_1_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_1_udkey_A_text_1))- , ((isoiec_9798_2_1_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_1_udkey_B_1))- , ((isoiec_9798_2_1_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_1_udkey_A_text_1))- , ((isoiec_9798_2_1_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_1_udkey_B_1))- ]"--sublocale isoiec_9798_2_1_udkey_state < isoiec_9798_2_1_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_1_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_1_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_1_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_1_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_1_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_1_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_1_udkey_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_1_udkey_A &- ( tid1, isoiec_9798_2_1_udkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_2_udkey_A-where "isoiec_9798_2_2_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''Text2'' |>- ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )- |>- ]"--role isoiec_9798_2_2_udkey_B-where "isoiec_9798_2_2_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sMV ''Text2'' |>- ( sK ''A'' ''B'' )- |>- ]"--protocol isoiec_9798_2_2_udkey-where "isoiec_9798_2_2_udkey =-{ isoiec_9798_2_2_udkey_A, isoiec_9798_2_2_udkey_B }"--locale restricted_isoiec_9798_2_2_udkey_state = isoiec_9798_2_2_udkey_state--type_invariant isoiec_9798_2_2_udkey_msc_typing for isoiec_9798_2_2_udkey-where "isoiec_9798_2_2_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_2_udkey_A, ''B''), (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_2_udkey_A, ''RB''), (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_2_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_2_udkey_A_1))- , ((isoiec_9798_2_2_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_2_udkey_B_text_1))- , ((isoiec_9798_2_2_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_2_udkey_A_text_2))- , ((isoiec_9798_2_2_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_2_udkey_B_2))- , ((isoiec_9798_2_2_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_2_udkey_A_text_2))- , ((isoiec_9798_2_2_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_2_udkey_B_2))- ]"--sublocale isoiec_9798_2_2_udkey_state < isoiec_9798_2_2_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_2_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_2_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_2_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_2_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_2_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_2_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_2_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_2_udkey_A &- ( tid1, isoiec_9798_2_2_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_3_udkey_A-where "isoiec_9798_2_3_udkey_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sMV ''Text1'' |>- ( sK ''A'' ''B'' )- |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sMV ''Text3'' |>- ( sK ''B'' ''A'' )- |>- ]"--role isoiec_9798_2_3_udkey_B-where "isoiec_9798_2_3_udkey_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sMV ''Text1'' |>- ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''Text3'' |>- ( PSymK ( sAV ''B'' ) ( sMV ''A'' ) )- |>- ]"--protocol isoiec_9798_2_3_udkey-where "isoiec_9798_2_3_udkey =-{ isoiec_9798_2_3_udkey_A, isoiec_9798_2_3_udkey_B }"--locale restricted_isoiec_9798_2_3_udkey_state = isoiec_9798_2_3_udkey_state--type_invariant isoiec_9798_2_3_udkey_msc_typing for isoiec_9798_2_3_udkey-where "isoiec_9798_2_3_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_3_udkey_B, ''A''), (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_3_udkey_B, ''TNA''),- (SumT (KnownT isoiec_9798_2_3_udkey_B_1) (NonceT isoiec_9798_2_3_udkey_A ''TNA'')))- , ((isoiec_9798_2_3_udkey_A, ''TNB''),- (SumT (KnownT isoiec_9798_2_3_udkey_A_2) (NonceT isoiec_9798_2_3_udkey_B ''TNB'')))- , ((isoiec_9798_2_3_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_3_udkey_A_text_1))- , ((isoiec_9798_2_3_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_3_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_3_udkey_A_text_1))- , ((isoiec_9798_2_3_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_3_udkey_B_1))- , ((isoiec_9798_2_3_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_3_udkey_A_2))- , ((isoiec_9798_2_3_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_3_udkey_B_text_2))- , ((isoiec_9798_2_3_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_3_udkey_A_2))- , ((isoiec_9798_2_3_udkey_B, ''Text4''),- (KnownT isoiec_9798_2_3_udkey_B_text_2))- ]"--sublocale isoiec_9798_2_3_udkey_state < isoiec_9798_2_3_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_3_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_3_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_3_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_3_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_3_udkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_udkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_udkey_B &- ( tid1, isoiec_9798_2_3_udkey_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_3_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_3_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_3_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_3_udkey_A &- ( tid1, isoiec_9798_2_3_udkey_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |}- ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_4_udkey_A-where "isoiec_9798_2_4_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'',- sMV ''Text2''- |>- ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',- sMV ''Text4''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''A'' ) )- |>- ]"--role isoiec_9798_2_4_udkey_B-where "isoiec_9798_2_4_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'',- sMV ''Text2''- |>- ( sK ''A'' ''B'' )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',- sMV ''Text4''- |>- ( sK ''B'' ''A'' )- |>- ]"--protocol isoiec_9798_2_4_udkey-where "isoiec_9798_2_4_udkey =-{ isoiec_9798_2_4_udkey_A, isoiec_9798_2_4_udkey_B }"--locale restricted_isoiec_9798_2_4_udkey_state = isoiec_9798_2_4_udkey_state--type_invariant isoiec_9798_2_4_udkey_msc_typing for isoiec_9798_2_4_udkey-where "isoiec_9798_2_4_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_4_udkey_A, ''B''), (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_4_udkey_B, ''RA''),- (SumT (KnownT isoiec_9798_2_4_udkey_B_2) (NonceT isoiec_9798_2_4_udkey_A ''RA'')))- , ((isoiec_9798_2_4_udkey_A, ''RB''), (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_4_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_4_udkey_A_1))- , ((isoiec_9798_2_4_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_4_udkey_B_text_1))- , ((isoiec_9798_2_4_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_4_udkey_A_text_2))- , ((isoiec_9798_2_4_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_4_udkey_B_2))- , ((isoiec_9798_2_4_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_4_udkey_A_text_2))- , ((isoiec_9798_2_4_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_4_udkey_B_2))- , ((isoiec_9798_2_4_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_4_udkey_A_3))- , ((isoiec_9798_2_4_udkey_B, ''Text4''),- (KnownT isoiec_9798_2_4_udkey_B_text_3))- , ((isoiec_9798_2_4_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_4_udkey_A_3))- , ((isoiec_9798_2_4_udkey_B, ''Text5''),- (KnownT isoiec_9798_2_4_udkey_B_text_3))- ]"--sublocale isoiec_9798_2_4_udkey_state < isoiec_9798_2_4_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_4_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_4_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_4_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_4_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_4_udkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_udkey_B &- ( tid1, isoiec_9798_2_4_udkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(MV ''Text4'' tid0)- |}- ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(MV ''Text2'' tid1)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_4_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_4_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_4_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_4_udkey_A &- ( tid1, isoiec_9798_2_4_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_5_udkey_A-where "isoiec_9798_2_5_udkey_A =- [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>- , Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',- sMV ''Text1''- |>- , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',- sAV ''B'', sMV ''Text3''- |>- ( sK ''A'' ''P'' ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_udkey_B-where "isoiec_9798_2_5_udkey_B =- [ Send ''leak_B'' ( sN ''TNb'' )- , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',- sMV ''A'', sMV ''Text2''- |>- ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',- sMV ''Text5''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>- , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',- PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',- sMV ''Text7''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_5_udkey_P-where "isoiec_9798_2_5_udkey_P =- [ Send ''leak_P'' ( sN ''TNp'' )- , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',- sMV ''Text1''- |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',- PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',- sMV ''B'', sMV ''Text3''- |>- ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',- sMV ''A'', sMV ''Text2''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )- |>- ]"--protocol isoiec_9798_2_5_udkey-where "isoiec_9798_2_5_udkey =-{ isoiec_9798_2_5_udkey_A, isoiec_9798_2_5_udkey_B,- isoiec_9798_2_5_udkey_P-}"--locale restricted_isoiec_9798_2_5_udkey_state = isoiec_9798_2_5_udkey_state--type_invariant isoiec_9798_2_5_udkey_msc_typing for isoiec_9798_2_5_udkey-where "isoiec_9798_2_5_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_5_udkey_B, ''A''), (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_P, ''A''), (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_5_udkey_P, ''B''), (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_5_udkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_udkey_A_2) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))- , ((isoiec_9798_2_5_udkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))- , ((isoiec_9798_2_5_udkey_B, ''P''), (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_B, ''TNa''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_A ''TNa'')))- , ((isoiec_9798_2_5_udkey_A, ''TNb''),- (SumT (KnownT isoiec_9798_2_5_udkey_A_4) (NonceT isoiec_9798_2_5_udkey_B ''TNb'')))- , ((isoiec_9798_2_5_udkey_B, ''TNp''),- (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''TNp'')))- , ((isoiec_9798_2_5_udkey_P, ''TVPa''),- (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_5_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_5_udkey_A_text_1))- , ((isoiec_9798_2_5_udkey_P, ''Text1''),- (KnownT isoiec_9798_2_5_udkey_P_1))- , ((isoiec_9798_2_5_udkey_B, ''Text2''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_P, ''Text2''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_5_udkey_A, ''Text3''),- (KnownT isoiec_9798_2_5_udkey_A_2))- , ((isoiec_9798_2_5_udkey_P, ''Text3''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_5_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_5_udkey_A_2))- , ((isoiec_9798_2_5_udkey_P, ''Text4''),- (KnownT isoiec_9798_2_5_udkey_P_text_2))- , ((isoiec_9798_2_5_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_5_udkey_A_text_3))- , ((isoiec_9798_2_5_udkey_B, ''Text5''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_A, ''Text6''),- (KnownT isoiec_9798_2_5_udkey_A_text_3))- , ((isoiec_9798_2_5_udkey_B, ''Text6''),- (KnownT isoiec_9798_2_5_udkey_B_3))- , ((isoiec_9798_2_5_udkey_A, ''Text7''),- (KnownT isoiec_9798_2_5_udkey_A_4))- , ((isoiec_9798_2_5_udkey_B, ''Text7''),- (KnownT isoiec_9798_2_5_udkey_B_text_4))- , ((isoiec_9798_2_5_udkey_A, ''Text8''),- (KnownT isoiec_9798_2_5_udkey_A_4))- , ((isoiec_9798_2_5_udkey_B, ''Text8''),- (KnownT isoiec_9798_2_5_udkey_B_text_4))- , ((isoiec_9798_2_5_udkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_5_udkey_A_2))- ]"--sublocale isoiec_9798_2_5_udkey_state < isoiec_9798_2_5_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_5_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_5_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_5_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_5_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_5_udkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_5_udkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_udkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_udkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_B &- ( tid1, isoiec_9798_2_5_udkey_B_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),- LN ''TNb'' tid1, s(MV ''Text7'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),- s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),- s(AV ''A'' tid0), s(MV ''Text7'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_B_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),- LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)- |}- ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),- s(AV ''B'' tid0), s(MV ''Text5'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_A_3_enc tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,- s(AV ''B'' tid0), s(MV ''Text3'' tid3)- |}- ( K ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_udkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_A &- ( tid1, isoiec_9798_2_5_udkey_A_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),- s(AV ''B'' tid0), s(MV ''Text5'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_A_3_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,- s(AV ''B'' tid0), s(MV ''Text3'' tid2)- |}- ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_udkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &- ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,- s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_5_udkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &- ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,- LN ''TNp'' tid1, s(MV ''Text2'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),- s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_2_6_udkey_A-where "isoiec_9798_2_6_udkey_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',- sMV ''B'', sMV ''Text4''- |>- ( sK ''A'' ''P'' ),- sMV ''TokenPA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',- sMV ''TokenPA_for_B'',- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_udkey_B-where "isoiec_9798_2_6_udkey_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',- sAV ''A'', sMV ''Text3''- |>- ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''Text6''- |>- ( sMV ''Kab'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',- PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',- sMV ''Text8''- |>- ( sMV ''Kab'' )- |>- ]"--role isoiec_9798_2_6_udkey_P-where "isoiec_9798_2_6_udkey_P =- [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',- PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',- sMV ''B'', sMV ''Text4''- |>- ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),- PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',- sMV ''A'', sMV ''Text3''- |>- ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )- |>- ]"--protocol isoiec_9798_2_6_udkey-where "isoiec_9798_2_6_udkey =-{ isoiec_9798_2_6_udkey_A, isoiec_9798_2_6_udkey_B,- isoiec_9798_2_6_udkey_P-}"--locale restricted_isoiec_9798_2_6_udkey_state = isoiec_9798_2_6_udkey_state--type_invariant isoiec_9798_2_6_udkey_msc_typing for isoiec_9798_2_6_udkey-where "isoiec_9798_2_6_udkey_msc_typing = mk_typing- [ ((isoiec_9798_2_6_udkey_P, ''A''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_A, ''B''), (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_P, ''B''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_A, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_udkey_A_3) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))- , ((isoiec_9798_2_6_udkey_B, ''Kab''),- (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))- , ((isoiec_9798_2_6_udkey_B, ''P''), (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_6_udkey_P, ''Ra''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_A, ''Rb''), (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_P, ''Rb''), (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_B, ''Rpa''),- (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_A ''Rpa'')))- , ((isoiec_9798_2_6_udkey_A, ''Text1''),- (KnownT isoiec_9798_2_6_udkey_A_1))- , ((isoiec_9798_2_6_udkey_B, ''Text1''),- (KnownT isoiec_9798_2_6_udkey_B_text_1))- , ((isoiec_9798_2_6_udkey_A, ''Text2''),- (KnownT isoiec_9798_2_6_udkey_A_text_2))- , ((isoiec_9798_2_6_udkey_P, ''Text2''),- (KnownT isoiec_9798_2_6_udkey_P_2))- , ((isoiec_9798_2_6_udkey_B, ''Text3''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_6_udkey_P, ''Text3''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_6_udkey_A, ''Text4''),- (KnownT isoiec_9798_2_6_udkey_A_3))- , ((isoiec_9798_2_6_udkey_P, ''Text4''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_6_udkey_A, ''Text5''),- (KnownT isoiec_9798_2_6_udkey_A_3))- , ((isoiec_9798_2_6_udkey_P, ''Text5''),- (KnownT isoiec_9798_2_6_udkey_P_text_3))- , ((isoiec_9798_2_6_udkey_A, ''Text6''),- (KnownT isoiec_9798_2_6_udkey_A_text_4))- , ((isoiec_9798_2_6_udkey_B, ''Text6''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_6_udkey_A, ''Text7''),- (KnownT isoiec_9798_2_6_udkey_A_text_4))- , ((isoiec_9798_2_6_udkey_B, ''Text7''),- (KnownT isoiec_9798_2_6_udkey_B_4))- , ((isoiec_9798_2_6_udkey_A, ''Text8''),- (KnownT isoiec_9798_2_6_udkey_A_5))- , ((isoiec_9798_2_6_udkey_B, ''Text8''),- (KnownT isoiec_9798_2_6_udkey_B_text_5))- , ((isoiec_9798_2_6_udkey_A, ''Text9''),- (KnownT isoiec_9798_2_6_udkey_A_5))- , ((isoiec_9798_2_6_udkey_B, ''Text9''),- (KnownT isoiec_9798_2_6_udkey_B_text_5))- , ((isoiec_9798_2_6_udkey_A, ''TokenPA_for_B''),- (KnownT isoiec_9798_2_6_udkey_A_3))- ]"--sublocale isoiec_9798_2_6_udkey_state < isoiec_9798_2_6_udkey_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_2_6_udkey_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_2_6_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_2_6_udkey_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_2_6_udkey_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_2_6_udkey_state) P_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_P"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "LN ''Kab'' tid0 : knows t"- shows "False"-using facts proof(sources! " LN ''Kab'' tid0 ")- case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)-qed (insert facts, fastsimp+)?--lemma (in restricted_isoiec_9798_2_6_udkey_state) A_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_udkey_state) B_secret_Kab:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- "s(MV ''Kab'' tid0) : knows t"- shows "False"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_udkey_state) A_non_injective_agreement_B:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_B &- ( tid1, isoiec_9798_2_6_udkey_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),- s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,- s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),- s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,- s(MV ''Text8'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_B_5_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,- s(AV ''A'' tid2), s(MV ''Text3'' tid2)- |}- ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid3) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,- s(MV ''Text6'' tid2)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_udkey_state) B_non_injective_agreement_A:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_A &- ( tid1, isoiec_9798_2_6_udkey_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,- s(MV ''Text6'' tid0)- |}- ( LN ''Kab'' tid1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_A_4_enc tid2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,- s(MV ''B'' tid2), s(MV ''Text4'' tid2)- |}- ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: P_secret_Kab intro: event_predOrdI)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_udkey_state) A_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''P'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &- ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),- LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,- s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)- |}- ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_2_6_udkey_state) B_non_injective_agreement_P:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''P'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &- ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),- s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),- LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,- s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_2_1_udkey_A+where "isoiec_9798_2_1_udkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sN ''TNA'', sMV ''Text1'' |>+ ( sK ''A'' ''B'' )+ |>+ ]"++role isoiec_9798_2_1_udkey_B+where "isoiec_9798_2_1_udkey_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_1_enc_1'', sMV ''TNA'', sMV ''Text1'' |>+ ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )+ |>+ ]"++protocol isoiec_9798_2_1_udkey+where "isoiec_9798_2_1_udkey =+{ isoiec_9798_2_1_udkey_A, isoiec_9798_2_1_udkey_B }"++locale restricted_isoiec_9798_2_1_udkey_state = isoiec_9798_2_1_udkey_state++type_invariant isoiec_9798_2_1_udkey_msc_typing for isoiec_9798_2_1_udkey+where "isoiec_9798_2_1_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_1_udkey_B, ''A''), (KnownT isoiec_9798_2_1_udkey_B_1))+ , ((isoiec_9798_2_1_udkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_1_udkey_B_1) (NonceT isoiec_9798_2_1_udkey_A ''TNA'')))+ , ((isoiec_9798_2_1_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_1_udkey_A_text_1))+ , ((isoiec_9798_2_1_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_1_udkey_B_1))+ , ((isoiec_9798_2_1_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_1_udkey_A_text_1))+ , ((isoiec_9798_2_1_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_1_udkey_B_1))+ ]"++sublocale isoiec_9798_2_1_udkey_state < isoiec_9798_2_1_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_1_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_1_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_1_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_1_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_1_udkey_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_1_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_1_udkey_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_1_udkey_A &+ ( tid1, isoiec_9798_2_1_udkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_2_udkey_A+where "isoiec_9798_2_2_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sMV ''RB'', sMV ''Text2'' |>+ ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )+ |>+ ]"++role isoiec_9798_2_2_udkey_B+where "isoiec_9798_2_2_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_2_enc_2'', sN ''RB'', sMV ''Text2'' |>+ ( sK ''A'' ''B'' )+ |>+ ]"++protocol isoiec_9798_2_2_udkey+where "isoiec_9798_2_2_udkey =+{ isoiec_9798_2_2_udkey_A, isoiec_9798_2_2_udkey_B }"++locale restricted_isoiec_9798_2_2_udkey_state = isoiec_9798_2_2_udkey_state++type_invariant isoiec_9798_2_2_udkey_msc_typing for isoiec_9798_2_2_udkey+where "isoiec_9798_2_2_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_2_udkey_A, ''B''), (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_2_udkey_A, ''RB''), (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_2_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_2_udkey_A_1))+ , ((isoiec_9798_2_2_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_2_udkey_B_text_1))+ , ((isoiec_9798_2_2_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_2_udkey_A_text_2))+ , ((isoiec_9798_2_2_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_2_udkey_B_2))+ , ((isoiec_9798_2_2_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_2_udkey_A_text_2))+ , ((isoiec_9798_2_2_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_2_udkey_B_2))+ ]"++sublocale isoiec_9798_2_2_udkey_state < isoiec_9798_2_2_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_2_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_2_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_2_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_2_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_2_udkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_2_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_2_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_2_udkey_A &+ ( tid1, isoiec_9798_2_2_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_2_3_udkey_A+where "isoiec_9798_2_3_udkey_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sN ''TNA'', sMV ''Text1'' |>+ ( sK ''A'' ''B'' )+ |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sMV ''TNB'', sMV ''Text3'' |>+ ( sK ''B'' ''A'' )+ |>+ ]"++role isoiec_9798_2_3_udkey_B+where "isoiec_9798_2_3_udkey_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PEnc <| sC ''isoiec_9798_2_3_enc_1'', sMV ''TNA'', sMV ''Text1'' |>+ ( PSymK ( sMV ''A'' ) ( sAV ''B'' ) )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''B'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_3_enc_2'', sN ''TNB'', sMV ''Text3'' |>+ ( PSymK ( sAV ''B'' ) ( sMV ''A'' ) )+ |>+ ]"++protocol isoiec_9798_2_3_udkey+where "isoiec_9798_2_3_udkey =+{ isoiec_9798_2_3_udkey_A, isoiec_9798_2_3_udkey_B }"++locale restricted_isoiec_9798_2_3_udkey_state = isoiec_9798_2_3_udkey_state++type_invariant isoiec_9798_2_3_udkey_msc_typing for isoiec_9798_2_3_udkey+where "isoiec_9798_2_3_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_3_udkey_B, ''A''), (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_3_udkey_B, ''TNA''),+ (SumT (KnownT isoiec_9798_2_3_udkey_B_1) (NonceT isoiec_9798_2_3_udkey_A ''TNA'')))+ , ((isoiec_9798_2_3_udkey_A, ''TNB''),+ (SumT (KnownT isoiec_9798_2_3_udkey_A_2) (NonceT isoiec_9798_2_3_udkey_B ''TNB'')))+ , ((isoiec_9798_2_3_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_3_udkey_A_text_1))+ , ((isoiec_9798_2_3_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_3_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_3_udkey_A_text_1))+ , ((isoiec_9798_2_3_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_3_udkey_B_1))+ , ((isoiec_9798_2_3_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_3_udkey_A_2))+ , ((isoiec_9798_2_3_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_3_udkey_B_text_2))+ , ((isoiec_9798_2_3_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_3_udkey_A_2))+ , ((isoiec_9798_2_3_udkey_B, ''Text4''),+ (KnownT isoiec_9798_2_3_udkey_B_text_2))+ ]"++sublocale isoiec_9798_2_3_udkey_state < isoiec_9798_2_3_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_3_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_3_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_3_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_3_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_3_udkey_state) A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_udkey_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_udkey_B &+ ( tid1, isoiec_9798_2_3_udkey_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_3_udkey_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_3_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_3_udkey_B_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_3_udkey_A &+ ( tid1, isoiec_9798_2_3_udkey_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |}+ ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_4_udkey_A+where "isoiec_9798_2_4_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sN ''RA'', sMV ''RB'',+ sMV ''Text2''+ |>+ ( PSymK ( sAV ''A'' ) ( sMV ''B'' ) )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sMV ''RB'', sN ''RA'',+ sMV ''Text4''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''A'' ) )+ |>+ ]"++role isoiec_9798_2_4_udkey_B+where "isoiec_9798_2_4_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PEnc <| sC ''isoiec_9798_2_4_enc_1'', sMV ''RA'', sN ''RB'',+ sMV ''Text2''+ |>+ ( sK ''A'' ''B'' )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_4_enc_2'', sN ''RB'', sMV ''RA'',+ sMV ''Text4''+ |>+ ( sK ''B'' ''A'' )+ |>+ ]"++protocol isoiec_9798_2_4_udkey+where "isoiec_9798_2_4_udkey =+{ isoiec_9798_2_4_udkey_A, isoiec_9798_2_4_udkey_B }"++locale restricted_isoiec_9798_2_4_udkey_state = isoiec_9798_2_4_udkey_state++type_invariant isoiec_9798_2_4_udkey_msc_typing for isoiec_9798_2_4_udkey+where "isoiec_9798_2_4_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_4_udkey_A, ''B''), (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_B, ''RA''),+ (SumT (KnownT isoiec_9798_2_4_udkey_B_2) (NonceT isoiec_9798_2_4_udkey_A ''RA'')))+ , ((isoiec_9798_2_4_udkey_A, ''RB''), (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_4_udkey_A_1))+ , ((isoiec_9798_2_4_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_4_udkey_B_text_1))+ , ((isoiec_9798_2_4_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_4_udkey_A_text_2))+ , ((isoiec_9798_2_4_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_4_udkey_B_2))+ , ((isoiec_9798_2_4_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_4_udkey_A_text_2))+ , ((isoiec_9798_2_4_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_4_udkey_B_2))+ , ((isoiec_9798_2_4_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_4_udkey_A_3))+ , ((isoiec_9798_2_4_udkey_B, ''Text4''),+ (KnownT isoiec_9798_2_4_udkey_B_text_3))+ , ((isoiec_9798_2_4_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_4_udkey_A_3))+ , ((isoiec_9798_2_4_udkey_B, ''Text5''),+ (KnownT isoiec_9798_2_4_udkey_B_text_3))+ ]"++sublocale isoiec_9798_2_4_udkey_state < isoiec_9798_2_4_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_4_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_4_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_4_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_4_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_4_udkey_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_udkey_B &+ ( tid1, isoiec_9798_2_4_udkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(MV ''Text4'' tid0)+ |}+ ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(MV ''Text2'' tid1)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_4_udkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_4_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_4_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_4_udkey_A &+ ( tid1, isoiec_9798_2_4_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_2_5_udkey_A+where "isoiec_9798_2_5_udkey_A =+ [ Send ''leak_A'' <| sN ''TVPa'', sN ''TNa'' |>+ , Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''P'', sN ''TVPa'', sAV ''B'',+ sMV ''Text1''+ |>+ , Recv ''2'' <| sAV ''P'', sAV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sN ''TVPa'', sMV ''Kab'',+ sAV ''B'', sMV ''Text3''+ |>+ ( sK ''A'' ''P'' ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''A'', sAV ''B'', sMV ''Text6'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sN ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''4'' <| sAV ''B'', sAV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sMV ''TNb'', sAV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_udkey_B+where "isoiec_9798_2_5_udkey_B =+ [ Send ''leak_B'' ( sN ''TNb'' )+ , Recv ''3'' <| sMV ''A'', sAV ''B'', sMV ''Text6'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sMV ''TNp'', sMV ''Kab'',+ sMV ''A'', sMV ''Text2''+ |>+ ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_5_enc_3'', sMV ''TNa'', sAV ''B'',+ sMV ''Text5''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_4'' <| sMV ''Text7'', sMV ''Text8'' |>+ , Send ''4'' <| sAV ''B'', sMV ''A'', sMV ''Text8'',+ PEnc <| sC ''isoiec_9798_2_5_enc_4'', sN ''TNb'', sMV ''A'',+ sMV ''Text7''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_5_udkey_P+where "isoiec_9798_2_5_udkey_P =+ [ Send ''leak_P'' ( sN ''TNp'' )+ , Recv ''1'' <| sMV ''A'', sAV ''P'', sMV ''TVPa'', sMV ''B'',+ sMV ''Text1''+ |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sAV ''P'', sMV ''A'', sMV ''Text4'',+ PEnc <| sC ''isoiec_9798_2_5_enc_2_1'', sMV ''TVPa'', sN ''Kab'',+ sMV ''B'', sMV ''Text3''+ |>+ ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_5_enc_2_2'', sN ''TNp'', sN ''Kab'',+ sMV ''A'', sMV ''Text2''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )+ |>+ ]"++protocol isoiec_9798_2_5_udkey+where "isoiec_9798_2_5_udkey =+{ isoiec_9798_2_5_udkey_A, isoiec_9798_2_5_udkey_B,+ isoiec_9798_2_5_udkey_P+}"++locale restricted_isoiec_9798_2_5_udkey_state = isoiec_9798_2_5_udkey_state++type_invariant isoiec_9798_2_5_udkey_msc_typing for isoiec_9798_2_5_udkey+where "isoiec_9798_2_5_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_5_udkey_B, ''A''), (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_P, ''A''), (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_5_udkey_P, ''B''), (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_5_udkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_udkey_A_2) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))+ , ((isoiec_9798_2_5_udkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''Kab'')))+ , ((isoiec_9798_2_5_udkey_B, ''P''), (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_B, ''TNa''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_A ''TNa'')))+ , ((isoiec_9798_2_5_udkey_A, ''TNb''),+ (SumT (KnownT isoiec_9798_2_5_udkey_A_4) (NonceT isoiec_9798_2_5_udkey_B ''TNb'')))+ , ((isoiec_9798_2_5_udkey_B, ''TNp''),+ (SumT (KnownT isoiec_9798_2_5_udkey_B_3) (NonceT isoiec_9798_2_5_udkey_P ''TNp'')))+ , ((isoiec_9798_2_5_udkey_P, ''TVPa''),+ (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_5_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_5_udkey_A_text_1))+ , ((isoiec_9798_2_5_udkey_P, ''Text1''),+ (KnownT isoiec_9798_2_5_udkey_P_1))+ , ((isoiec_9798_2_5_udkey_B, ''Text2''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_P, ''Text2''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_5_udkey_A, ''Text3''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ , ((isoiec_9798_2_5_udkey_P, ''Text3''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_5_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ , ((isoiec_9798_2_5_udkey_P, ''Text4''),+ (KnownT isoiec_9798_2_5_udkey_P_text_2))+ , ((isoiec_9798_2_5_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_5_udkey_A_text_3))+ , ((isoiec_9798_2_5_udkey_B, ''Text5''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_A, ''Text6''),+ (KnownT isoiec_9798_2_5_udkey_A_text_3))+ , ((isoiec_9798_2_5_udkey_B, ''Text6''),+ (KnownT isoiec_9798_2_5_udkey_B_3))+ , ((isoiec_9798_2_5_udkey_A, ''Text7''),+ (KnownT isoiec_9798_2_5_udkey_A_4))+ , ((isoiec_9798_2_5_udkey_B, ''Text7''),+ (KnownT isoiec_9798_2_5_udkey_B_text_4))+ , ((isoiec_9798_2_5_udkey_A, ''Text8''),+ (KnownT isoiec_9798_2_5_udkey_A_4))+ , ((isoiec_9798_2_5_udkey_B, ''Text8''),+ (KnownT isoiec_9798_2_5_udkey_B_text_4))+ , ((isoiec_9798_2_5_udkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_5_udkey_A_2))+ ]"++sublocale isoiec_9798_2_5_udkey_state < isoiec_9798_2_5_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_5_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_5_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_5_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_5_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_5_udkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_5_udkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_udkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_udkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_udkey_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_B &+ ( tid1, isoiec_9798_2_5_udkey_B_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''TNa'' tid1), s(MV ''Text5'' tid1),+ LN ''TNb'' tid1, s(MV ''Text7'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TNa'' tid0, s(MV ''Text5'' tid0),+ s(MV ''TNb'' tid0), s(MV ''Text7'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0),+ s(AV ''A'' tid0), s(MV ''Text7'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_B_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid2),+ LN ''Kab'' tid1, s(AV ''A'' tid0), s(MV ''Text2'' tid2)+ |}+ ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid2),+ s(AV ''B'' tid0), s(MV ''Text5'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_A_3_enc tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid3, LN ''Kab'' tid1,+ s(AV ''B'' tid0), s(MV ''Text3'' tid3)+ |}+ ( K ( s(AV ''A'' tid3) ) ( s(AV ''P'' tid3) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_udkey_state) B_non_injective_agreement_A:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_A &+ ( tid1, isoiec_9798_2_5_udkey_A_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''TNa'' tid1, s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNa'' tid0), s(MV ''Text5'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0),+ s(AV ''B'' tid0), s(MV ''Text5'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_A_3_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid2, LN ''Kab'' tid1,+ s(AV ''B'' tid0), s(MV ''Text3'' tid2)+ |}+ ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_5_udkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_5_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_5_udkey_A_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &+ ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ s(MV ''TVPa'' tid1), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''TVPa'' tid0, s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0,+ s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_5_udkey_state) B_non_injective_agreement_P:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_5_udkey_B"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_5_udkey_B_3 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_2_5_udkey_P &+ ( tid1, isoiec_9798_2_5_udkey_P_2 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1), LN ''Kab'' tid1,+ LN ''TNp'' tid1, s(MV ''Text2'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''TNp'' tid0), s(MV ''Text2'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0),+ s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_2_6_udkey_A+where "isoiec_9798_2_6_udkey_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''P'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''P'', sAV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sN ''Ra'', sMV ''Kab'',+ sMV ''B'', sMV ''Text4''+ |>+ ( sK ''A'' ''P'' ),+ sMV ''TokenPA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sMV ''Text7'', sAV ''P'',+ sMV ''TokenPA_for_B'',+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sN ''Rpa'', sMV ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''5'' <| sMV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sMV ''Rb'', sN ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_udkey_B+where "isoiec_9798_2_6_udkey_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text7'', sMV ''P'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sN ''Rb'', sMV ''Kab'',+ sAV ''A'', sMV ''Text3''+ |>+ ( PSymK ( sAV ''B'' ) ( sMV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_6_enc_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''Text6''+ |>+ ( sMV ''Kab'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''B'', sAV ''A'', sMV ''Text9'',+ PEnc <| sC ''isoiec_9798_2_6_enc_5'', sN ''Rb'', sMV ''Rpa'',+ sMV ''Text8''+ |>+ ( sMV ''Kab'' )+ |>+ ]"++role isoiec_9798_2_6_udkey_P+where "isoiec_9798_2_6_udkey_P =+ [ Recv ''2'' <| sMV ''A'', sAV ''P'', sMV ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''P'', sMV ''A'', sMV ''Text5'',+ PEnc <| sC ''isoiec_9798_2_6_enc_3_1'', sMV ''Ra'', sN ''Kab'',+ sMV ''B'', sMV ''Text4''+ |>+ ( PSymK ( sMV ''A'' ) ( sAV ''P'' ) ),+ PEnc <| sC ''isoiec_9798_2_6_enc_3_2'', sMV ''Rb'', sN ''Kab'',+ sMV ''A'', sMV ''Text3''+ |>+ ( PSymK ( sMV ''B'' ) ( sAV ''P'' ) )+ |>+ ]"++protocol isoiec_9798_2_6_udkey+where "isoiec_9798_2_6_udkey =+{ isoiec_9798_2_6_udkey_A, isoiec_9798_2_6_udkey_B,+ isoiec_9798_2_6_udkey_P+}"++locale restricted_isoiec_9798_2_6_udkey_state = isoiec_9798_2_6_udkey_state++type_invariant isoiec_9798_2_6_udkey_msc_typing for isoiec_9798_2_6_udkey+where "isoiec_9798_2_6_udkey_msc_typing = mk_typing+ [ ((isoiec_9798_2_6_udkey_P, ''A''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_A, ''B''), (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_P, ''B''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_A, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_udkey_A_3) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))+ , ((isoiec_9798_2_6_udkey_B, ''Kab''),+ (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_P ''Kab'')))+ , ((isoiec_9798_2_6_udkey_B, ''P''), (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_6_udkey_P, ''Ra''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_A, ''Rb''), (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_P, ''Rb''), (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_B, ''Rpa''),+ (SumT (KnownT isoiec_9798_2_6_udkey_B_4) (NonceT isoiec_9798_2_6_udkey_A ''Rpa'')))+ , ((isoiec_9798_2_6_udkey_A, ''Text1''),+ (KnownT isoiec_9798_2_6_udkey_A_1))+ , ((isoiec_9798_2_6_udkey_B, ''Text1''),+ (KnownT isoiec_9798_2_6_udkey_B_text_1))+ , ((isoiec_9798_2_6_udkey_A, ''Text2''),+ (KnownT isoiec_9798_2_6_udkey_A_text_2))+ , ((isoiec_9798_2_6_udkey_P, ''Text2''),+ (KnownT isoiec_9798_2_6_udkey_P_2))+ , ((isoiec_9798_2_6_udkey_B, ''Text3''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_6_udkey_P, ''Text3''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_6_udkey_A, ''Text4''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ , ((isoiec_9798_2_6_udkey_P, ''Text4''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_6_udkey_A, ''Text5''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ , ((isoiec_9798_2_6_udkey_P, ''Text5''),+ (KnownT isoiec_9798_2_6_udkey_P_text_3))+ , ((isoiec_9798_2_6_udkey_A, ''Text6''),+ (KnownT isoiec_9798_2_6_udkey_A_text_4))+ , ((isoiec_9798_2_6_udkey_B, ''Text6''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_6_udkey_A, ''Text7''),+ (KnownT isoiec_9798_2_6_udkey_A_text_4))+ , ((isoiec_9798_2_6_udkey_B, ''Text7''),+ (KnownT isoiec_9798_2_6_udkey_B_4))+ , ((isoiec_9798_2_6_udkey_A, ''Text8''),+ (KnownT isoiec_9798_2_6_udkey_A_5))+ , ((isoiec_9798_2_6_udkey_B, ''Text8''),+ (KnownT isoiec_9798_2_6_udkey_B_text_5))+ , ((isoiec_9798_2_6_udkey_A, ''Text9''),+ (KnownT isoiec_9798_2_6_udkey_A_5))+ , ((isoiec_9798_2_6_udkey_B, ''Text9''),+ (KnownT isoiec_9798_2_6_udkey_B_text_5))+ , ((isoiec_9798_2_6_udkey_A, ''TokenPA_for_B''),+ (KnownT isoiec_9798_2_6_udkey_A_3))+ ]"++sublocale isoiec_9798_2_6_udkey_state < isoiec_9798_2_6_udkey_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_2_6_udkey_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_2_6_udkey_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( s(MV ''Kab'' tid0) ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_2_6_udkey_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_2_6_udkey_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_2_6_udkey_state) P_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_P"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "LN ''Kab'' tid0 : knows t"+ shows "False"+using facts proof(sources! " LN ''Kab'' tid0 ")+ case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+next+ case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+qed (insert facts, fastforce+)?++lemma (in restricted_isoiec_9798_2_6_udkey_state) A_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_A"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''P'' tid0)) ~: reveals t"+ "RLKR(s(MV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_udkey_state) B_secret_Kab:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_2_6_udkey_B"+ "RLKR(s(AV ''A'' tid0)) ~: reveals t"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "RLKR(s(MV ''P'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t"+ "s(MV ''Kab'' tid0) : knows t"+ shows "False"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_2_6_udkey_state) A_injective_agreement_B:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_B &+ ( tid1, isoiec_9798_2_6_udkey_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''P'' tid1),+ s(MV ''Kab'' tid1), s(MV ''Rpa'' tid1), LN ''Rb'' tid1,+ s(MV ''Text6'' tid1), s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ s(MV ''Kab'' tid0), LN ''Rpa'' tid0, s(MV ''Rb'' tid0),+ s(MV ''Text6'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0,+ s(MV ''Text8'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid2, LN ''Kab'' tid1,+ s(AV ''A'' tid2), s(MV ''Text3'' tid2)+ |}+ ( K ( s(AV ''B'' tid2) ) ( s(MV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid3) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', LN ''Rpa'' tid0, LN ''Rb'' tid2,+ s(MV ''Text6'' tid2)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_udkey_state) B_injective_agreement_A:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_A &+ ( tid1, isoiec_9798_2_6_udkey_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Kab'' tid1), LN ''Rpa'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ s(MV ''Kab'' tid0), s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0,+ s(MV ''Text6'' tid0)+ |}+ ( LN ''Kab'' tid1 ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid2, LN ''Kab'' tid1,+ s(MV ''B'' tid2), s(MV ''Text4'' tid2)+ |}+ ( K ( s(AV ''A'' tid2) ) ( s(AV ''P'' tid2) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_udkey_state) A_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''P'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &+ ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Ra'' tid1), LN ''Kab'' tid1, s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''P'' tid0),+ LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0,+ s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0)+ |}+ ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_2_6_udkey_state) B_injective_agreement_P:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_2_6_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''P'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_2_6_udkey_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_2_6_udkey_P &+ ( tid1, isoiec_9798_2_6_udkey_P_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''P'' tid1),+ s(MV ''Rb'' tid1), LN ''Kab'' tid1, s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''P'' tid0),+ LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0,+ s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy view
@@ -1,3320 +1,3726 @@ theory "isoiec-9798-3_cert_auto" imports- "../ESPLogic"-begin--role isoiec_9798_3_1_A-where "isoiec_9798_3_1_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_1_sig_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_1_B-where "isoiec_9798_3_1_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_1_sig_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- ]"--protocol isoiec_9798_3_1-where "isoiec_9798_3_1 = { isoiec_9798_3_1_A, isoiec_9798_3_1_B }"--locale restricted_isoiec_9798_3_1_state = isoiec_9798_3_1_state--type_invariant isoiec_9798_3_1_msc_typing for isoiec_9798_3_1-where "isoiec_9798_3_1_msc_typing = mk_typing- [ ((isoiec_9798_3_1_B, ''A''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_1_B, ''TNA''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_1_A, ''Text1''), (KnownT isoiec_9798_3_1_A_text_1))- , ((isoiec_9798_3_1_B, ''Text1''), (KnownT isoiec_9798_3_1_B_1))- , ((isoiec_9798_3_1_A, ''Text2''), (KnownT isoiec_9798_3_1_A_text_1))- , ((isoiec_9798_3_1_B, ''Text2''), (KnownT isoiec_9798_3_1_B_1))- ]"--sublocale isoiec_9798_3_1_state < isoiec_9798_3_1_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_1_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_1_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_1_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_1_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_1_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_1_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_1_A &- ( tid1, isoiec_9798_3_1_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_1_sig_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_2_A-where "isoiec_9798_3_2_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_2_sig_2'', sN ''Ra'', sMV ''Rb'', sMV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_2_B-where "isoiec_9798_3_2_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_2_sig_2'', sMV ''Ra'', sN ''Rb'', sAV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- ]"--protocol isoiec_9798_3_2-where "isoiec_9798_3_2 = { isoiec_9798_3_2_A, isoiec_9798_3_2_B }"--locale restricted_isoiec_9798_3_2_state = isoiec_9798_3_2_state--type_invariant isoiec_9798_3_2_msc_typing for isoiec_9798_3_2-where "isoiec_9798_3_2_msc_typing = mk_typing- [ ((isoiec_9798_3_2_A, ''B''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_2_B, ''Ra''), (KnownT isoiec_9798_3_2_B_2))- , ((isoiec_9798_3_2_A, ''Rb''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_2_A, ''Text1''), (KnownT isoiec_9798_3_2_A_1))- , ((isoiec_9798_3_2_B, ''Text1''), (KnownT isoiec_9798_3_2_B_text_1))- , ((isoiec_9798_3_2_A, ''Text2''), (KnownT isoiec_9798_3_2_A_text_2))- , ((isoiec_9798_3_2_B, ''Text2''), (KnownT isoiec_9798_3_2_B_2))- , ((isoiec_9798_3_2_A, ''Text3''), (KnownT isoiec_9798_3_2_A_text_2))- , ((isoiec_9798_3_2_B, ''Text3''), (KnownT isoiec_9798_3_2_B_2))- ]"--sublocale isoiec_9798_3_2_state < isoiec_9798_3_2_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_2_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_2_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_2_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_2_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_2_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_2_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_2_A &- ( tid1, isoiec_9798_3_2_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_2_sig_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_3_A-where "isoiec_9798_3_3_A =- [ Send ''leak_A'' ( sN ''TNA'' )- , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>- , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_3_sig_1'', sN ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( sPK ''A'' )- |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_3_sig_2'', sMV ''TNB'', sAV ''A'',- sMV ''Text3''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_3_B-where "isoiec_9798_3_3_B =- [ Send ''leak_B'' ( sN ''TNB'' )- , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',- PSign <| sC ''isoiec_9798_3_3_sig_1'', sMV ''TNA'', sAV ''B'',- sMV ''Text1''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_3_sig_2'', sN ''TNB'', sMV ''A'',- sMV ''Text3''- |>- ( sPK ''B'' )- |>- ]"--protocol isoiec_9798_3_3-where "isoiec_9798_3_3 = { isoiec_9798_3_3_A, isoiec_9798_3_3_B }"--locale restricted_isoiec_9798_3_3_state = isoiec_9798_3_3_state--type_invariant isoiec_9798_3_3_msc_typing for isoiec_9798_3_3-where "isoiec_9798_3_3_msc_typing = mk_typing- [ ((isoiec_9798_3_3_B, ''A''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_3_B, ''TNA''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_3_A, ''TNB''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_3_A, ''Text1''), (KnownT isoiec_9798_3_3_A_text_1))- , ((isoiec_9798_3_3_B, ''Text1''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_3_A, ''Text2''), (KnownT isoiec_9798_3_3_A_text_1))- , ((isoiec_9798_3_3_B, ''Text2''), (KnownT isoiec_9798_3_3_B_1))- , ((isoiec_9798_3_3_A, ''Text3''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_3_B, ''Text3''), (KnownT isoiec_9798_3_3_B_text_2))- , ((isoiec_9798_3_3_A, ''Text4''), (KnownT isoiec_9798_3_3_A_2))- , ((isoiec_9798_3_3_B, ''Text4''), (KnownT isoiec_9798_3_3_B_text_2))- ]"--sublocale isoiec_9798_3_3_state < isoiec_9798_3_3_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_3_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_3_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_3_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_3_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_3_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_3_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_3_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_3_A_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_3_B &- ( tid1, isoiec_9798_3_3_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,- s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),- s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_3_sig_2'', s(MV ''TNB'' tid0),- s(AV ''A'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_3_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_3_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_3_B_1 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_3_A &- ( tid1, isoiec_9798_3_3_A_1 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,- s(MV ''Text1'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),- s(MV ''Text1'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_3_sig_1'', s(MV ''TNA'' tid0),- s(AV ''B'' tid0), s(MV ''Text1'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_4_A-where "isoiec_9798_3_4_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_4_sig_1'', sN ''RA'', sMV ''RB'', sMV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',- PSign <| sC ''isoiec_9798_3_4_sig_2'', sMV ''RB'', sN ''RA'', sAV ''A'',- sMV ''Text4''- |>- ( PAsymPK ( sMV ''B'' ) )- |>- ]"--role isoiec_9798_3_4_B-where "isoiec_9798_3_4_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_4_sig_1'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text2''- |>- ( sPK ''A'' )- |>- , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',- PSign <| sC ''isoiec_9798_3_4_sig_2'', sN ''RB'', sMV ''RA'', sAV ''A'',- sMV ''Text4''- |>- ( sPK ''B'' )- |>- ]"--protocol isoiec_9798_3_4-where "isoiec_9798_3_4 = { isoiec_9798_3_4_A, isoiec_9798_3_4_B }"--locale restricted_isoiec_9798_3_4_state = isoiec_9798_3_4_state--type_invariant isoiec_9798_3_4_msc_typing for isoiec_9798_3_4-where "isoiec_9798_3_4_msc_typing = mk_typing- [ ((isoiec_9798_3_4_A, ''B''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_4_B, ''RA''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_4_A, ''RB''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_4_A, ''Text1''), (KnownT isoiec_9798_3_4_A_1))- , ((isoiec_9798_3_4_B, ''Text1''), (KnownT isoiec_9798_3_4_B_text_1))- , ((isoiec_9798_3_4_A, ''Text2''), (KnownT isoiec_9798_3_4_A_text_2))- , ((isoiec_9798_3_4_B, ''Text2''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_4_A, ''Text3''), (KnownT isoiec_9798_3_4_A_text_2))- , ((isoiec_9798_3_4_B, ''Text3''), (KnownT isoiec_9798_3_4_B_2))- , ((isoiec_9798_3_4_A, ''Text4''), (KnownT isoiec_9798_3_4_A_3))- , ((isoiec_9798_3_4_B, ''Text4''), (KnownT isoiec_9798_3_4_B_text_3))- , ((isoiec_9798_3_4_A, ''Text5''), (KnownT isoiec_9798_3_4_A_3))- , ((isoiec_9798_3_4_B, ''Text5''), (KnownT isoiec_9798_3_4_B_text_3))- ]"--sublocale isoiec_9798_3_4_state < isoiec_9798_3_4_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_4_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_4_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_4_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_4_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_4_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_4_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_4_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_4_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_4_B &- ( tid1, isoiec_9798_3_4_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(AV ''A'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_1'', LN ''RA'' tid0, LN ''RB'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_4_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_4_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_4_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_4_A &- ( tid1, isoiec_9798_3_4_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_4_sig_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_5_A-where "isoiec_9798_3_5_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''RA'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text2'' |>- , Recv ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text6'',- PSign <| sC ''isoiec_9798_3_5_sig_1'', sMV ''RB'', sN ''RA'', sAV ''A'',- sMV ''Text5''- |>- ( sPK ''B'' )- |>- , Recv ''text_4'' <| sMV ''Text3'', sMV ''Text4'' |>- , Send ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_5_sig_2'', sN ''RA'', sMV ''RB'', sAV ''B'',- sMV ''Text3''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_5_B-where "isoiec_9798_3_5_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''RA'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''B'', sMV ''A'', sN ''RB'', sMV ''Text2'' |>- , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>- , Send ''3'' <| sAV ''B'', sMV ''A'', sMV ''Text6'',- PSign <| sC ''isoiec_9798_3_5_sig_1'', sN ''RB'', sMV ''RA'', sMV ''A'',- sMV ''Text5''- |>- ( sPK ''B'' )- |>- , Recv ''4'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',- PSign <| sC ''isoiec_9798_3_5_sig_2'', sMV ''RA'', sN ''RB'', sAV ''B'',- sMV ''Text3''- |>- ( PAsymPK ( sMV ''A'' ) )- |>- ]"--protocol isoiec_9798_3_5-where "isoiec_9798_3_5 = { isoiec_9798_3_5_A, isoiec_9798_3_5_B }"--locale restricted_isoiec_9798_3_5_state = isoiec_9798_3_5_state--type_invariant isoiec_9798_3_5_msc_typing for isoiec_9798_3_5-where "isoiec_9798_3_5_msc_typing = mk_typing- [ ((isoiec_9798_3_5_B, ''A''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_5_B, ''RA''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_5_A, ''RB''), (KnownT isoiec_9798_3_5_A_2))- , ((isoiec_9798_3_5_A, ''Text1''), (KnownT isoiec_9798_3_5_A_text_1))- , ((isoiec_9798_3_5_B, ''Text1''), (KnownT isoiec_9798_3_5_B_1))- , ((isoiec_9798_3_5_A, ''Text2''), (KnownT isoiec_9798_3_5_A_2))- , ((isoiec_9798_3_5_B, ''Text2''), (KnownT isoiec_9798_3_5_B_text_2))- , ((isoiec_9798_3_5_A, ''Text3''), (KnownT isoiec_9798_3_5_A_text_4))- , ((isoiec_9798_3_5_B, ''Text3''), (KnownT isoiec_9798_3_5_B_4))- , ((isoiec_9798_3_5_A, ''Text4''), (KnownT isoiec_9798_3_5_A_text_4))- , ((isoiec_9798_3_5_B, ''Text4''), (KnownT isoiec_9798_3_5_B_4))- , ((isoiec_9798_3_5_A, ''Text5''), (KnownT isoiec_9798_3_5_A_3))- , ((isoiec_9798_3_5_B, ''Text5''), (KnownT isoiec_9798_3_5_B_text_3))- , ((isoiec_9798_3_5_A, ''Text6''), (KnownT isoiec_9798_3_5_A_3))- , ((isoiec_9798_3_5_B, ''Text6''), (KnownT isoiec_9798_3_5_B_text_3))- ]"--sublocale isoiec_9798_3_5_state < isoiec_9798_3_5_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_5_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_5_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_5_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_5_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_5_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_5_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_5_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_5_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_5_B &- ( tid1, isoiec_9798_3_5_B_3 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,- s(MV ''Text5'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RA'' tid0,- s(MV ''RB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_1'', s(MV ''RB'' tid0), LN ''RA'' tid0,- s(AV ''A'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_5_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_5_B"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_5_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_5_A &- ( tid1, isoiec_9798_3_5_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),- s(MV ''Text3'' tid1), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),- LN ''RB'' tid0, s(MV ''Text3'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_2'', s(MV ''RA'' tid0), LN ''RB'' tid0,- s(AV ''B'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_5_sig_1'', LN ''RB'' tid0, LN ''RA'' tid1,- s(AV ''A'' tid1), s(MV ''Text5'' tid1)- |}- ( SK ( s(AV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_6_1_A-where "isoiec_9798_3_6_1_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text3'', sMV ''TokenBA''- |>- , Recv ''text_3'' ( sMV ''Text4'' )- , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',- sMV ''Text4''- |>- , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',- sPK ''A'', sAV ''B'', sMV ''pkB'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sN ''Rpa'', sAV ''B'',- sMV ''pkB'', sMV ''Text6''- |>- ( sPK ''T'' ),- sMV ''TokenTA_for_B''- |>- , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenBA'' |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sN ''Ra'',- sMV ''Rb'', sAV ''A'', sMV ''Text2''- |>- ( sMV ''pkB'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Text9'', sAV ''T'',- sMV ''TokenTA_for_B'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sMV ''Rb'', sN ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text8''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_6_1_B-where "isoiec_9798_3_6_1_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sMV ''Ra'',- sN ''Rb'', sMV ''A'', sMV ''Text2''- |>- ( sPK ''B'' )- |>- , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Text9'', sMV ''T'',- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sN ''Rb'', sMV ''A'',- sMV ''pkA'', sMV ''Text5''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sN ''Rb'', sMV ''Ra5'',- sAV ''B'', sMV ''A'', sMV ''Text8''- |>- ( sMV ''pkA'' )- |>- ]"--role isoiec_9798_3_6_1_T-where "isoiec_9798_3_6_1_T =- [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',- sMV ''Text4''- |>- , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sMV ''Rpa'', sMV ''B'',- PAsymPK ( sMV ''B'' ), sMV ''Text6''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sMV ''Rb'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''Text5''- |>- ( sPK ''T'' )- |>- ]"--protocol isoiec_9798_3_6_1-where "isoiec_9798_3_6_1 =-{ isoiec_9798_3_6_1_A, isoiec_9798_3_6_1_B, isoiec_9798_3_6_1_T }"--locale restricted_isoiec_9798_3_6_1_state = isoiec_9798_3_6_1_state--type_invariant isoiec_9798_3_6_1_msc_typing for isoiec_9798_3_6_1-where "isoiec_9798_3_6_1_msc_typing = mk_typing- [ ((isoiec_9798_3_6_1_B, ''A''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_1_T, ''A''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_1_T, ''B''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_1_B, ''Ra''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_1_B, ''Ra5''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_A, ''Rb''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_1_T, ''Rb''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_1_T, ''Rpa''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_1_B, ''T''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_A, ''Text1''), (KnownT isoiec_9798_3_6_1_A_text_1))- , ((isoiec_9798_3_6_1_B, ''Text1''), (KnownT isoiec_9798_3_6_1_B_1))- , ((isoiec_9798_3_6_1_A, ''Text2''),- (KnownT isoiec_9798_3_6_1_A_check_4_in))- , ((isoiec_9798_3_6_1_B, ''Text2''), (KnownT isoiec_9798_3_6_1_B_text_2))- , ((isoiec_9798_3_6_1_A, ''Text3''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_1_B, ''Text3''), (KnownT isoiec_9798_3_6_1_B_text_2))- , ((isoiec_9798_3_6_1_A, ''Text4''), (KnownT isoiec_9798_3_6_1_A_text_3))- , ((isoiec_9798_3_6_1_T, ''Text4''), (KnownT isoiec_9798_3_6_1_T_3))- , ((isoiec_9798_3_6_1_B, ''Text5''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_T, ''Text5''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_6_1_A, ''Text6''), (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_1_T, ''Text6''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_6_1_A, ''Text7''), (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_1_T, ''Text7''), (KnownT isoiec_9798_3_6_1_T_text_4))- , ((isoiec_9798_3_6_1_A, ''Text8''), (KnownT isoiec_9798_3_6_1_A_text_5))- , ((isoiec_9798_3_6_1_B, ''Text8''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_A, ''Text9''), (KnownT isoiec_9798_3_6_1_A_text_5))- , ((isoiec_9798_3_6_1_B, ''Text9''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_A, ''TokenBA''), (KnownT isoiec_9798_3_6_1_A_2))- , ((isoiec_9798_3_6_1_A, ''TokenTA_for_B''),- (KnownT isoiec_9798_3_6_1_A_4))- , ((isoiec_9798_3_6_1_B, ''pkA''), (KnownT isoiec_9798_3_6_1_B_5))- , ((isoiec_9798_3_6_1_A, ''pkB''), (KnownT isoiec_9798_3_6_1_A_4))- ]"--sublocale isoiec_9798_3_6_1_state < isoiec_9798_3_6_1_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_6_1_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_6_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Ra5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_6_1_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_6_1_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_6_1_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_B &- ( tid1, isoiec_9798_3_6_1_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_1_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_A &- ( tid1, isoiec_9798_3_6_1_A_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text8'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra5'' tid0),- LN ''Rb'' tid0, s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,- s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_5'', LN ''Rb'' tid0,- s(MV ''Ra5'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_1_state) A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_T &- ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &- {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),- PK ( s(MV ''B'' tid1) ), s(MV ''Text6'' tid1)- |} = {| s(AV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,- s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_1_state) B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_1_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_1_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_1_T &- ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),- PK ( s(MV ''A'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,- s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,- s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_6_2_A-where "isoiec_9798_3_6_2_A =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>- , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text3'', sMV ''TokenBA''- |>- , Recv ''text_3'' ( sMV ''Text4'' )- , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',- sMV ''Text4''- |>- , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',- sPK ''A'', sAV ''B'', sMV ''pkB'', sMV ''TokenTA''- |>- , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'',- sMV ''TokenBA''- |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sN ''Rpa'', sMV ''Rb'',- sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sN ''Ra'',- sMV ''Rb'', sAV ''A'', sMV ''Text2''- |>- ( sMV ''pkB'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sN ''Rpa'', sMV ''Text9'',- sAV ''T'', sMV ''TokenTA'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sMV ''Rb'', sN ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text8''- |>- ( sPK ''A'' )- |>- ]"--role isoiec_9798_3_6_2_B-where "isoiec_9798_3_6_2_B =- [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>- , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>- , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text3'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sMV ''Ra'',- sN ''Rb'', sMV ''A'', sMV ''Text2''- |>- ( sPK ''B'' )- |>- , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sN ''Rb'',- sMV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sN ''Rb'', sMV ''Ra5'',- sAV ''B'', sMV ''A'', sMV ''Text8''- |>- ( sMV ''pkA'' )- |>- ]"--role isoiec_9798_3_6_2_T-where "isoiec_9798_3_6_2_T =- [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',- sMV ''Text4''- |>- , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sMV ''Rb'',- sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- sMV ''Text5''- |>- ( sPK ''T'' )- |>- ]"--protocol isoiec_9798_3_6_2-where "isoiec_9798_3_6_2 =-{ isoiec_9798_3_6_2_A, isoiec_9798_3_6_2_B, isoiec_9798_3_6_2_T }"--locale restricted_isoiec_9798_3_6_2_state = isoiec_9798_3_6_2_state--type_invariant isoiec_9798_3_6_2_msc_typing for isoiec_9798_3_6_2-where "isoiec_9798_3_6_2_msc_typing = mk_typing- [ ((isoiec_9798_3_6_2_B, ''A''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_6_2_T, ''A''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_6_2_T, ''B''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_6_2_B, ''Ra''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_6_2_B, ''Ra5''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_A, ''Rb''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_T, ''Rb''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_6_2_B, ''Rpa''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_T, ''Rpa''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_6_2_B, ''T''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_A, ''Text1''), (KnownT isoiec_9798_3_6_2_A_text_1))- , ((isoiec_9798_3_6_2_B, ''Text1''), (KnownT isoiec_9798_3_6_2_B_1))- , ((isoiec_9798_3_6_2_A, ''Text2''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''Text2''), (KnownT isoiec_9798_3_6_2_B_text_2))- , ((isoiec_9798_3_6_2_A, ''Text3''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_B, ''Text3''), (KnownT isoiec_9798_3_6_2_B_text_2))- , ((isoiec_9798_3_6_2_A, ''Text4''), (KnownT isoiec_9798_3_6_2_A_text_3))- , ((isoiec_9798_3_6_2_T, ''Text4''), (KnownT isoiec_9798_3_6_2_T_3))- , ((isoiec_9798_3_6_2_A, ''Text5''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''Text5''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_T, ''Text5''), (KnownT isoiec_9798_3_6_2_T_text_4))- , ((isoiec_9798_3_6_2_A, ''Text7''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_6_2_T, ''Text7''), (KnownT isoiec_9798_3_6_2_T_text_4))- , ((isoiec_9798_3_6_2_A, ''Text8''), (KnownT isoiec_9798_3_6_2_A_text_5))- , ((isoiec_9798_3_6_2_B, ''Text8''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_A, ''Text9''), (KnownT isoiec_9798_3_6_2_A_text_5))- , ((isoiec_9798_3_6_2_B, ''Text9''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_A, ''TokenBA''), (KnownT isoiec_9798_3_6_2_A_2))- , ((isoiec_9798_3_6_2_A, ''TokenTA''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_6_2_A, ''pkA''),- (KnownT isoiec_9798_3_6_2_A_check_4_in))- , ((isoiec_9798_3_6_2_B, ''pkA''), (KnownT isoiec_9798_3_6_2_B_5))- , ((isoiec_9798_3_6_2_A, ''pkB''), (KnownT isoiec_9798_3_6_2_A_4))- , ((isoiec_9798_3_6_2_B, ''pkB''), (KnownT isoiec_9798_3_6_2_B_5))- ]"--sublocale isoiec_9798_3_6_2_state < isoiec_9798_3_6_2_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_6_2_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_6_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Ra5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_6_2_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_6_2_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_6_2_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_A"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_B &- ( tid1, isoiec_9798_3_6_2_B_2 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_2_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_B"- "RLKR(s(MV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_A &- ( tid1, isoiec_9798_3_6_2_A_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text8'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra5'' tid0),- LN ''Rb'' tid0, s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_5'', LN ''Rb'' tid0,- s(MV ''Ra5'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_2_state) A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_T &- ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''T'' tid0),- LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |},- {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |},- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),- LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)- |}- ( inv(s(MV ''pkB'' tid0)) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_6_2_state) B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_6_2_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_6_2_B_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_6_2_T &- ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)- |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),- s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_7_1_A-where "isoiec_9798_3_7_1_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',- sPK ''A'', sMV ''B'', sMV ''pkB'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sN ''Rpa'', sMV ''B'',- sMV ''pkB'', sMV ''Text4''- |>- ( sPK ''T'' ),- sMV ''TokenTA_for_B''- |>- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',- sAV ''T'', sMV ''TokenTA_for_B'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sMV ''Rb'', sN ''Ra'',- sMV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sPK ''A'' )- |>- , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sN ''Ra'', sMV ''Rb'',- sAV ''A'', sMV ''B'', sMV ''Text8''- |>- ( sMV ''pkB'' )- |>- ]"--role isoiec_9798_3_7_1_B-where "isoiec_9798_3_7_1_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sN ''Rb'', sAV ''A'',- sMV ''pkA'', sMV ''Text3''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sN ''Rb'', sMV ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sMV ''pkA'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sMV ''Ra'', sN ''Rb'',- sAV ''A'', sAV ''B'', sMV ''Text8''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_7_1_T-where "isoiec_9798_3_7_1_T =- [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sMV ''Rpa'', sMV ''B'',- PAsymPK ( sMV ''B'' ), sMV ''Text4''- |>- ( sPK ''T'' ),- PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sMV ''Rb'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''Text3''- |>- ( sPK ''T'' )- |>- ]"--protocol isoiec_9798_3_7_1-where "isoiec_9798_3_7_1 =-{ isoiec_9798_3_7_1_A, isoiec_9798_3_7_1_B, isoiec_9798_3_7_1_T }"--locale restricted_isoiec_9798_3_7_1_state = isoiec_9798_3_7_1_state--type_invariant isoiec_9798_3_7_1_msc_typing for isoiec_9798_3_7_1-where "isoiec_9798_3_7_1_msc_typing = mk_typing- [ ((isoiec_9798_3_7_1_T, ''A''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_1_A, ''B''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_T, ''B''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_1_B, ''Ra''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_A, ''Rb''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_T, ''Rb''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_1_B, ''Rpa''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_T, ''Rpa''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_1_B, ''T''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_A, ''Text1''), (KnownT isoiec_9798_3_7_1_A_1))- , ((isoiec_9798_3_7_1_B, ''Text1''), (KnownT isoiec_9798_3_7_1_B_text_1))- , ((isoiec_9798_3_7_1_A, ''Text2''), (KnownT isoiec_9798_3_7_1_A_text_2))- , ((isoiec_9798_3_7_1_T, ''Text2''), (KnownT isoiec_9798_3_7_1_T_2))- , ((isoiec_9798_3_7_1_B, ''Text3''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_T, ''Text3''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_7_1_A, ''Text4''), (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_1_T, ''Text4''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_7_1_A, ''Text5''), (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_1_T, ''Text5''), (KnownT isoiec_9798_3_7_1_T_text_3))- , ((isoiec_9798_3_7_1_A, ''Text6''), (KnownT isoiec_9798_3_7_1_A_text_4))- , ((isoiec_9798_3_7_1_B, ''Text6''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_A, ''Text7''), (KnownT isoiec_9798_3_7_1_A_text_4))- , ((isoiec_9798_3_7_1_A, ''Text8''), (KnownT isoiec_9798_3_7_1_A_5))- , ((isoiec_9798_3_7_1_B, ''Text8''), (KnownT isoiec_9798_3_7_1_B_text_5))- , ((isoiec_9798_3_7_1_A, ''Text9''), (KnownT isoiec_9798_3_7_1_A_5))- , ((isoiec_9798_3_7_1_B, ''Text9''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_A, ''TokenTA_for_B''),- (KnownT isoiec_9798_3_7_1_A_3))- , ((isoiec_9798_3_7_1_B, ''pkA''), (KnownT isoiec_9798_3_7_1_B_4))- , ((isoiec_9798_3_7_1_A, ''pkB''), (KnownT isoiec_9798_3_7_1_A_3))- ]"--sublocale isoiec_9798_3_7_1_state < isoiec_9798_3_7_1_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_7_1_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_7_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_7_1_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_7_1_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_7_1_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_B &- ( tid1, isoiec_9798_3_7_1_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_5'', LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_1_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_A &- ( tid1, isoiec_9798_3_7_1_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,- s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_4'', LN ''Rb'' tid0,- s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),- s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_1_state) A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_T &- ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &- {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),- PK ( s(MV ''B'' tid1) ), s(MV ''Text4'' tid1)- |} = {| s(MV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,- s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_1_state) B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_1_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_1_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_1_T &- ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),- PK ( s(MV ''A'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,- s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,- s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?-qed--role isoiec_9798_3_7_2_A-where "isoiec_9798_3_7_2_A =- [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>- , Recv ''text_2'' ( sMV ''Text2'' )- , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',- sPK ''A'', sMV ''B'', sMV ''pkB'', sMV ''TokenTA''- |>- , Send ''check_3_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'' |>- ( sN ''check_nonce_4'' )- )- , Recv ''check_3_in'' ( PEnc <| sC ''check_4'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sN ''Rpa'', sMV ''Rb'',- sAV ''A'', sMV ''pkA'', sMV ''B'', sMV ''pkB'', sMV ''Text3''- |>- ( sPK ''T'' )- |>- ( sN ''check_nonce_4'' )- )- , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>- , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',- sAV ''T'', sMV ''TokenTA'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sMV ''Rb'', sN ''Ra'',- sMV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sPK ''A'' )- |>- , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sN ''Ra'', sMV ''Rb'',- sAV ''A'', sMV ''B'', sMV ''Text8''- |>- ( sMV ''pkB'' )- |>- ]"--role isoiec_9798_3_7_2_B-where "isoiec_9798_3_7_2_B =- [ Recv ''text_1'' ( sMV ''Text1'' )- , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>- , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',- sMV ''T'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sN ''Rb'',- sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text3''- |>- ( PAsymPK ( sMV ''T'' ) ),- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sN ''Rb'', sMV ''Ra'',- sAV ''B'', sAV ''A'', sMV ''Text6''- |>- ( sMV ''pkA'' )- |>- , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>- , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',- sMV ''Text9'',- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sMV ''Ra'', sN ''Rb'',- sAV ''A'', sAV ''B'', sMV ''Text8''- |>- ( sPK ''B'' )- |>- ]"--role isoiec_9798_3_7_2_T-where "isoiec_9798_3_7_2_T =- [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',- sMV ''B'', sMV ''Text2''- |>- , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text5'' |>- , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',- PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sMV ''Rb'',- sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),- sMV ''Text3''- |>- ( sPK ''T'' )- |>- ]"--protocol isoiec_9798_3_7_2-where "isoiec_9798_3_7_2 =-{ isoiec_9798_3_7_2_A, isoiec_9798_3_7_2_B, isoiec_9798_3_7_2_T }"--locale restricted_isoiec_9798_3_7_2_state = isoiec_9798_3_7_2_state--type_invariant isoiec_9798_3_7_2_msc_typing for isoiec_9798_3_7_2-where "isoiec_9798_3_7_2_msc_typing = mk_typing- [ ((isoiec_9798_3_7_2_T, ''A''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_7_2_A, ''B''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_T, ''B''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_7_2_B, ''Ra''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_A, ''Rb''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_T, ''Rb''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_7_2_B, ''Rpa''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_T, ''Rpa''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_7_2_B, ''T''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_A, ''Text1''), (KnownT isoiec_9798_3_7_2_A_1))- , ((isoiec_9798_3_7_2_B, ''Text1''), (KnownT isoiec_9798_3_7_2_B_text_1))- , ((isoiec_9798_3_7_2_A, ''Text2''), (KnownT isoiec_9798_3_7_2_A_text_2))- , ((isoiec_9798_3_7_2_T, ''Text2''), (KnownT isoiec_9798_3_7_2_T_2))- , ((isoiec_9798_3_7_2_A, ''Text3''),- (KnownT isoiec_9798_3_7_2_A_check_3_in))- , ((isoiec_9798_3_7_2_B, ''Text3''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_T, ''Text3''), (KnownT isoiec_9798_3_7_2_T_text_3))- , ((isoiec_9798_3_7_2_A, ''Text5''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_7_2_T, ''Text5''), (KnownT isoiec_9798_3_7_2_T_text_3))- , ((isoiec_9798_3_7_2_A, ''Text6''), (KnownT isoiec_9798_3_7_2_A_text_4))- , ((isoiec_9798_3_7_2_B, ''Text6''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_A, ''Text7''), (KnownT isoiec_9798_3_7_2_A_text_4))- , ((isoiec_9798_3_7_2_A, ''Text8''), (KnownT isoiec_9798_3_7_2_A_5))- , ((isoiec_9798_3_7_2_B, ''Text8''), (KnownT isoiec_9798_3_7_2_B_text_5))- , ((isoiec_9798_3_7_2_A, ''Text9''), (KnownT isoiec_9798_3_7_2_A_5))- , ((isoiec_9798_3_7_2_B, ''Text9''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_A, ''TokenTA''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_7_2_A, ''pkA''),- (KnownT isoiec_9798_3_7_2_A_check_3_in))- , ((isoiec_9798_3_7_2_B, ''pkA''), (KnownT isoiec_9798_3_7_2_B_4))- , ((isoiec_9798_3_7_2_A, ''pkB''), (KnownT isoiec_9798_3_7_2_A_3))- , ((isoiec_9798_3_7_2_B, ''pkB''), (KnownT isoiec_9798_3_7_2_B_4))- ]"--sublocale isoiec_9798_3_7_2_state < isoiec_9798_3_7_2_msc_typing_state-proof -- have "(t,r,s) : approx isoiec_9798_3_7_2_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF isoiec_9798_3_7_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?- next- case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- next- case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this- then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)- qed- thus "isoiec_9798_3_7_2_msc_typing_state t r s" by unfold_locales auto-qed--text{* Prove secrecy of long-term keys. *}-context isoiec_9798_3_7_2_state begin-- (* This rule is unsafe in general, but OK here, - as we are only reasoning about static compromise. - *)- lemma static_longterm_key_reveal[dest!]:- "predOrd t (LKR a) e ==> RLKR a : reveals t"- by (auto intro: compr_predOrdI)-- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "RLKR m ~: reveals t"- shows "False"- using facts by (sources "SK m")-- lemma longterm_sym_ud_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- shows "False"- using facts by (sources "K m1 m2")-- lemma longterm_sym_bd_key_secrecy:- assumes facts:- "Kbd m1 m2 : knows t"- "RLKR m1 ~: reveals t"- "RLKR m2 ~: reveals t"- "m1 : Agent"- "m2 : Agent"- shows "False"- proof -- from facts - have "KShr (agents {m1, m2}) : knows t"- by (auto simp: Kbd_def)- thus ?thesis using facts- proof (sources "KShr (agents {m1, m2})")- qed (auto simp: agents_def Agent_def)- qed-- lemmas ltk_secrecy =- longterm_sym_ud_key_secrecy- longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]- longterm_sym_bd_key_secrecy- longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]--end--lemma (in restricted_isoiec_9798_3_7_2_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_A_5 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_B &- ( tid1, isoiec_9798_3_7_2_B_5 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text8'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_5'', LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),- s(MV ''Text8'' tid0)- |}- ( SK ( s(MV ''B'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_2_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_A &- ( tid1, isoiec_9798_3_7_2_A_4 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text6'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text6'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_4'', LN ''Rb'' tid0,- s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),- s(MV ''Text6'' tid0)- |}- ( SK ( s(AV ''A'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_2_state) A_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_A"- "RLKR(s(AV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_A_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_T &- ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''T'' tid0),- LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''check_4'',- {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |},- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) )- |}- ( LN ''check_nonce_4'' tid0 ) ")- case fake note_unified facts = this facts- thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastsimp+)?- next- case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,- s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),- s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(AV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_3_7_2_state) B_non_injective_agreement_T:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_3_7_2_B"- "RLKR(s(MV ''T'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_3_7_2_B_4 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_3_7_2_T &- ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &- {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),- s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),- PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),- s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),- LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),- s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)- |}- ( SK ( s(MV ''T'' tid0) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ "ESPLogic"+begin++role isoiec_9798_3_1_A+where "isoiec_9798_3_1_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_1_sig_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_1_B+where "isoiec_9798_3_1_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_1_sig_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ ]"++protocol isoiec_9798_3_1+where "isoiec_9798_3_1 = { isoiec_9798_3_1_A, isoiec_9798_3_1_B }"++locale restricted_isoiec_9798_3_1_state = isoiec_9798_3_1_state++type_invariant isoiec_9798_3_1_msc_typing for isoiec_9798_3_1+where "isoiec_9798_3_1_msc_typing = mk_typing+ [ ((isoiec_9798_3_1_B, ''A''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_1_B, ''TNA''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_1_A, ''Text1''), (KnownT isoiec_9798_3_1_A_text_1))+ , ((isoiec_9798_3_1_B, ''Text1''), (KnownT isoiec_9798_3_1_B_1))+ , ((isoiec_9798_3_1_A, ''Text2''), (KnownT isoiec_9798_3_1_A_text_1))+ , ((isoiec_9798_3_1_B, ''Text2''), (KnownT isoiec_9798_3_1_B_1))+ ]"++sublocale isoiec_9798_3_1_state < isoiec_9798_3_1_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_1_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_1_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_1_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_1_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_1_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_1_B"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_1_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_1_A &+ ( tid1, isoiec_9798_3_1_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_1_sig_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_3_2_A+where "isoiec_9798_3_2_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_2_sig_2'', sN ''Ra'', sMV ''Rb'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_2_B+where "isoiec_9798_3_2_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_2_sig_2'', sMV ''Ra'', sN ''Rb'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ ]"++protocol isoiec_9798_3_2+where "isoiec_9798_3_2 = { isoiec_9798_3_2_A, isoiec_9798_3_2_B }"++locale restricted_isoiec_9798_3_2_state = isoiec_9798_3_2_state++type_invariant isoiec_9798_3_2_msc_typing for isoiec_9798_3_2+where "isoiec_9798_3_2_msc_typing = mk_typing+ [ ((isoiec_9798_3_2_A, ''B''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_2_B, ''Ra''), (KnownT isoiec_9798_3_2_B_2))+ , ((isoiec_9798_3_2_A, ''Rb''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_2_A, ''Text1''), (KnownT isoiec_9798_3_2_A_1))+ , ((isoiec_9798_3_2_B, ''Text1''), (KnownT isoiec_9798_3_2_B_text_1))+ , ((isoiec_9798_3_2_A, ''Text2''), (KnownT isoiec_9798_3_2_A_text_2))+ , ((isoiec_9798_3_2_B, ''Text2''), (KnownT isoiec_9798_3_2_B_2))+ , ((isoiec_9798_3_2_A, ''Text3''), (KnownT isoiec_9798_3_2_A_text_2))+ , ((isoiec_9798_3_2_B, ''Text3''), (KnownT isoiec_9798_3_2_B_2))+ ]"++sublocale isoiec_9798_3_2_state < isoiec_9798_3_2_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_2_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_2_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_2_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_2_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_2_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_2_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_2_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_2_A &+ ( tid1, isoiec_9798_3_2_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_2_sig_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_3_A+where "isoiec_9798_3_3_A =+ [ Send ''leak_A'' ( sN ''TNA'' )+ , Recv ''text_1'' <| sMV ''Text1'', sMV ''Text2'' |>+ , Send ''1'' <| sAV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_3_sig_1'', sN ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_3_sig_2'', sMV ''TNB'', sAV ''A'',+ sMV ''Text3''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_3_B+where "isoiec_9798_3_3_B =+ [ Send ''leak_B'' ( sN ''TNB'' )+ , Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Text2'',+ PSign <| sC ''isoiec_9798_3_3_sig_1'', sMV ''TNA'', sAV ''B'',+ sMV ''Text1''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ , Recv ''text_2'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_3_sig_2'', sN ''TNB'', sMV ''A'',+ sMV ''Text3''+ |>+ ( sPK ''B'' )+ |>+ ]"++protocol isoiec_9798_3_3+where "isoiec_9798_3_3 = { isoiec_9798_3_3_A, isoiec_9798_3_3_B }"++locale restricted_isoiec_9798_3_3_state = isoiec_9798_3_3_state++type_invariant isoiec_9798_3_3_msc_typing for isoiec_9798_3_3+where "isoiec_9798_3_3_msc_typing = mk_typing+ [ ((isoiec_9798_3_3_B, ''A''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_3_B, ''TNA''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_3_A, ''TNB''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_3_A, ''Text1''), (KnownT isoiec_9798_3_3_A_text_1))+ , ((isoiec_9798_3_3_B, ''Text1''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_3_A, ''Text2''), (KnownT isoiec_9798_3_3_A_text_1))+ , ((isoiec_9798_3_3_B, ''Text2''), (KnownT isoiec_9798_3_3_B_1))+ , ((isoiec_9798_3_3_A, ''Text3''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_3_B, ''Text3''), (KnownT isoiec_9798_3_3_B_text_2))+ , ((isoiec_9798_3_3_A, ''Text4''), (KnownT isoiec_9798_3_3_A_2))+ , ((isoiec_9798_3_3_B, ''Text4''), (KnownT isoiec_9798_3_3_B_text_2))+ ]"++sublocale isoiec_9798_3_3_state < isoiec_9798_3_3_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_3_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_3_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_3_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_3_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_3_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_3_state) A_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_3_A"+ "RLKR(s(AV ''B'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_3_A_2 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_3_B &+ ( tid1, isoiec_9798_3_3_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), LN ''TNB'' tid1,+ s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNB'' tid0),+ s(MV ''Text3'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_3_sig_2'', s(MV ''TNB'' tid0),+ s(AV ''A'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++lemma (in restricted_isoiec_9798_3_3_state) B_non_injective_agreement:+ assumes facts:+ "roleMap r tid0 = Some isoiec_9798_3_3_B"+ "RLKR(s(MV ''A'' tid0)) ~: reveals t"+ "( tid0, isoiec_9798_3_3_B_1 ) : steps t"+ shows+ "(? tid1.+ roleMap r tid1 = Some isoiec_9798_3_3_A &+ ( tid1, isoiec_9798_3_3_A_1 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''TNA'' tid1,+ s(MV ''Text1'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''TNA'' tid0),+ s(MV ''Text1'' tid0)+ |})"+proof -+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_3_sig_1'', s(MV ''TNA'' tid0),+ s(AV ''B'' tid0), s(MV ''Text1'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+qed++role isoiec_9798_3_4_A+where "isoiec_9798_3_4_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sAV ''A'', sMV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_4_sig_1'', sN ''RA'', sMV ''RB'', sMV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''3'' <| sMV ''B'', sAV ''A'', sMV ''Text5'',+ PSign <| sC ''isoiec_9798_3_4_sig_2'', sMV ''RB'', sN ''RA'', sAV ''A'',+ sMV ''Text4''+ |>+ ( PAsymPK ( sMV ''B'' ) )+ |>+ ]"++role isoiec_9798_3_4_B+where "isoiec_9798_3_4_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''RB'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_4_sig_1'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text2''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''text_3'' <| sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text5'',+ PSign <| sC ''isoiec_9798_3_4_sig_2'', sN ''RB'', sMV ''RA'', sAV ''A'',+ sMV ''Text4''+ |>+ ( sPK ''B'' )+ |>+ ]"++protocol isoiec_9798_3_4+where "isoiec_9798_3_4 = { isoiec_9798_3_4_A, isoiec_9798_3_4_B }"++locale restricted_isoiec_9798_3_4_state = isoiec_9798_3_4_state++type_invariant isoiec_9798_3_4_msc_typing for isoiec_9798_3_4+where "isoiec_9798_3_4_msc_typing = mk_typing+ [ ((isoiec_9798_3_4_A, ''B''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_4_B, ''RA''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_4_A, ''RB''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_4_A, ''Text1''), (KnownT isoiec_9798_3_4_A_1))+ , ((isoiec_9798_3_4_B, ''Text1''), (KnownT isoiec_9798_3_4_B_text_1))+ , ((isoiec_9798_3_4_A, ''Text2''), (KnownT isoiec_9798_3_4_A_text_2))+ , ((isoiec_9798_3_4_B, ''Text2''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_4_A, ''Text3''), (KnownT isoiec_9798_3_4_A_text_2))+ , ((isoiec_9798_3_4_B, ''Text3''), (KnownT isoiec_9798_3_4_B_2))+ , ((isoiec_9798_3_4_A, ''Text4''), (KnownT isoiec_9798_3_4_A_3))+ , ((isoiec_9798_3_4_B, ''Text4''), (KnownT isoiec_9798_3_4_B_text_3))+ , ((isoiec_9798_3_4_A, ''Text5''), (KnownT isoiec_9798_3_4_A_3))+ , ((isoiec_9798_3_4_B, ''Text5''), (KnownT isoiec_9798_3_4_B_text_3))+ ]"++sublocale isoiec_9798_3_4_state < isoiec_9798_3_4_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_4_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_4_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_4_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_4_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_4_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_4_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_4_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_4_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_4_B &+ ( tid1, isoiec_9798_3_4_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_2'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(AV ''A'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_1'', LN ''RA'' tid0, LN ''RB'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_4_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_4_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_4_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_4_A &+ ( tid1, isoiec_9798_3_4_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_4_sig_1'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_5_A+where "isoiec_9798_3_5_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''RA'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''B'', sAV ''A'', sMV ''RB'', sMV ''Text2'' |>+ , Recv ''3'' <| sAV ''B'', sAV ''A'', sMV ''Text6'',+ PSign <| sC ''isoiec_9798_3_5_sig_1'', sMV ''RB'', sN ''RA'', sAV ''A'',+ sMV ''Text5''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''text_4'' <| sMV ''Text3'', sMV ''Text4'' |>+ , Send ''4'' <| sAV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_5_sig_2'', sN ''RA'', sMV ''RB'', sAV ''B'',+ sMV ''Text3''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_5_B+where "isoiec_9798_3_5_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''RA'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''B'', sMV ''A'', sN ''RB'', sMV ''Text2'' |>+ , Recv ''text_3'' <| sMV ''Text5'', sMV ''Text6'' |>+ , Send ''3'' <| sAV ''B'', sMV ''A'', sMV ''Text6'',+ PSign <| sC ''isoiec_9798_3_5_sig_1'', sN ''RB'', sMV ''RA'', sMV ''A'',+ sMV ''Text5''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''4'' <| sMV ''A'', sAV ''B'', sMV ''Text4'',+ PSign <| sC ''isoiec_9798_3_5_sig_2'', sMV ''RA'', sN ''RB'', sAV ''B'',+ sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''A'' ) )+ |>+ ]"++protocol isoiec_9798_3_5+where "isoiec_9798_3_5 = { isoiec_9798_3_5_A, isoiec_9798_3_5_B }"++locale restricted_isoiec_9798_3_5_state = isoiec_9798_3_5_state++type_invariant isoiec_9798_3_5_msc_typing for isoiec_9798_3_5+where "isoiec_9798_3_5_msc_typing = mk_typing+ [ ((isoiec_9798_3_5_B, ''A''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_5_B, ''RA''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_5_A, ''RB''), (KnownT isoiec_9798_3_5_A_2))+ , ((isoiec_9798_3_5_A, ''Text1''), (KnownT isoiec_9798_3_5_A_text_1))+ , ((isoiec_9798_3_5_B, ''Text1''), (KnownT isoiec_9798_3_5_B_1))+ , ((isoiec_9798_3_5_A, ''Text2''), (KnownT isoiec_9798_3_5_A_2))+ , ((isoiec_9798_3_5_B, ''Text2''), (KnownT isoiec_9798_3_5_B_text_2))+ , ((isoiec_9798_3_5_A, ''Text3''), (KnownT isoiec_9798_3_5_A_text_4))+ , ((isoiec_9798_3_5_B, ''Text3''), (KnownT isoiec_9798_3_5_B_4))+ , ((isoiec_9798_3_5_A, ''Text4''), (KnownT isoiec_9798_3_5_A_text_4))+ , ((isoiec_9798_3_5_B, ''Text4''), (KnownT isoiec_9798_3_5_B_4))+ , ((isoiec_9798_3_5_A, ''Text5''), (KnownT isoiec_9798_3_5_A_3))+ , ((isoiec_9798_3_5_B, ''Text5''), (KnownT isoiec_9798_3_5_B_text_3))+ , ((isoiec_9798_3_5_A, ''Text6''), (KnownT isoiec_9798_3_5_A_3))+ , ((isoiec_9798_3_5_B, ''Text6''), (KnownT isoiec_9798_3_5_B_text_3))+ ]"++sublocale isoiec_9798_3_5_state < isoiec_9798_3_5_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_5_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_5_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_5_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_5_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_5_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_5_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_5_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_5_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_5_B &+ ( tid1, isoiec_9798_3_5_B_3 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''RA'' tid1), LN ''RB'' tid1,+ s(MV ''Text5'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''RA'' tid0,+ s(MV ''RB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_1'', s(MV ''RB'' tid0), LN ''RA'' tid0,+ s(AV ''A'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_5_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_5_B &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_5_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_5_A &+ ( tid1, isoiec_9798_3_5_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''RA'' tid1, s(MV ''RB'' tid1),+ s(MV ''Text3'' tid1), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''RA'' tid0),+ LN ''RB'' tid0, s(MV ''Text3'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_2'', s(MV ''RA'' tid0), LN ''RB'' tid0,+ s(AV ''B'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_5_sig_1'', LN ''RB'' tid0, LN ''RA'' tid1,+ s(AV ''A'' tid1), s(MV ''Text5'' tid1)+ |}+ ( SK ( s(AV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_6_1_A+where "isoiec_9798_3_6_1_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text3'', sMV ''TokenBA''+ |>+ , Recv ''text_3'' ( sMV ''Text4'' )+ , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',+ sMV ''Text4''+ |>+ , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',+ sPK ''A'', sAV ''B'', sMV ''pkB'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sN ''Rpa'', sAV ''B'',+ sMV ''pkB'', sMV ''Text6''+ |>+ ( sPK ''T'' ),+ sMV ''TokenTA_for_B''+ |>+ , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenBA'' |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sN ''Ra'',+ sMV ''Rb'', sAV ''A'', sMV ''Text2''+ |>+ ( sMV ''pkB'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Text9'', sAV ''T'',+ sMV ''TokenTA_for_B'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sMV ''Rb'', sN ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text8''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_6_1_B+where "isoiec_9798_3_6_1_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_2'', sAV ''B'', sMV ''Ra'',+ sN ''Rb'', sMV ''A'', sMV ''Text2''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Text9'', sMV ''T'',+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sN ''Rb'', sMV ''A'',+ sMV ''pkA'', sMV ''Text5''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_5'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sMV ''A'', sMV ''Text8''+ |>+ ( sMV ''pkA'' )+ |>+ ]"++role isoiec_9798_3_6_1_T+where "isoiec_9798_3_6_1_T =+ [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',+ sMV ''Text4''+ |>+ , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_1'', sMV ''Rpa'', sMV ''B'',+ PAsymPK ( sMV ''B'' ), sMV ''Text6''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_1_sig_4_2'', sMV ''Rb'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''Text5''+ |>+ ( sPK ''T'' )+ |>+ ]"++protocol isoiec_9798_3_6_1+where "isoiec_9798_3_6_1 =+{ isoiec_9798_3_6_1_A, isoiec_9798_3_6_1_B, isoiec_9798_3_6_1_T }"++locale restricted_isoiec_9798_3_6_1_state = isoiec_9798_3_6_1_state++type_invariant isoiec_9798_3_6_1_msc_typing for isoiec_9798_3_6_1+where "isoiec_9798_3_6_1_msc_typing = mk_typing+ [ ((isoiec_9798_3_6_1_B, ''A''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_1_T, ''A''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_1_T, ''B''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_1_B, ''Ra''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_1_A, ''Rb''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_1_T, ''Rb''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_1_T, ''Rpa''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_1_B, ''T''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_A, ''Text1''), (KnownT isoiec_9798_3_6_1_A_text_1))+ , ((isoiec_9798_3_6_1_B, ''Text1''), (KnownT isoiec_9798_3_6_1_B_1))+ , ((isoiec_9798_3_6_1_A, ''Text2''),+ (KnownT isoiec_9798_3_6_1_A_check_4_in))+ , ((isoiec_9798_3_6_1_B, ''Text2''), (KnownT isoiec_9798_3_6_1_B_text_2))+ , ((isoiec_9798_3_6_1_A, ''Text3''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_1_B, ''Text3''), (KnownT isoiec_9798_3_6_1_B_text_2))+ , ((isoiec_9798_3_6_1_A, ''Text4''), (KnownT isoiec_9798_3_6_1_A_text_3))+ , ((isoiec_9798_3_6_1_T, ''Text4''), (KnownT isoiec_9798_3_6_1_T_3))+ , ((isoiec_9798_3_6_1_B, ''Text5''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_T, ''Text5''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_6_1_A, ''Text6''), (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_1_T, ''Text6''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_6_1_A, ''Text7''), (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_1_T, ''Text7''), (KnownT isoiec_9798_3_6_1_T_text_4))+ , ((isoiec_9798_3_6_1_A, ''Text8''), (KnownT isoiec_9798_3_6_1_A_text_5))+ , ((isoiec_9798_3_6_1_B, ''Text8''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_A, ''Text9''), (KnownT isoiec_9798_3_6_1_A_text_5))+ , ((isoiec_9798_3_6_1_B, ''Text9''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_A, ''TokenBA''), (KnownT isoiec_9798_3_6_1_A_2))+ , ((isoiec_9798_3_6_1_A, ''TokenTA_for_B''),+ (KnownT isoiec_9798_3_6_1_A_4))+ , ((isoiec_9798_3_6_1_B, ''pkA''), (KnownT isoiec_9798_3_6_1_B_5))+ , ((isoiec_9798_3_6_1_A, ''pkB''), (KnownT isoiec_9798_3_6_1_A_4))+ ]"++sublocale isoiec_9798_3_6_1_state < isoiec_9798_3_6_1_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_6_1_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_6_1_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_6_1_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_6_1_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_6_1_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_B &+ ( tid1, isoiec_9798_3_6_1_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_1_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_B &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_A &+ ( tid1, isoiec_9798_3_6_1_A_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text8'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,+ s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_5'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_1_state) A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_T &+ ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &+ {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text6'' tid1)+ |} = {| s(AV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,+ s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_1'', LN ''Rpa'' tid0,+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_1_state) B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_1_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_1_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_1_T &+ ( tid1, isoiec_9798_3_6_1_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),+ PK ( s(MV ''A'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,+ s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_1_sig_4_2'', LN ''Rb'' tid0,+ s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_6_2_A+where "isoiec_9798_3_6_2_A =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Text1'' |>+ , Recv ''2'' <| sAV ''A'', sAV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text3'', sMV ''TokenBA''+ |>+ , Recv ''text_3'' ( sMV ''Text4'' )+ , Send ''3'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''B'',+ sMV ''Text4''+ |>+ , Recv ''4'' <| sAV ''T'', sAV ''A'', sMV ''Text7'', sAV ''A'',+ sPK ''A'', sAV ''B'', sMV ''pkB'', sMV ''TokenTA''+ |>+ , Send ''check_4_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'',+ sMV ''TokenBA''+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_4_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sN ''Rpa'', sMV ''Rb'',+ sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sN ''Ra'',+ sMV ''Rb'', sAV ''A'', sMV ''Text2''+ |>+ ( sMV ''pkB'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sN ''Rpa'', sMV ''Text9'',+ sAV ''T'', sMV ''TokenTA'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sMV ''Rb'', sN ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text8''+ |>+ ( sPK ''A'' )+ |>+ ]"++role isoiec_9798_3_6_2_B+where "isoiec_9798_3_6_2_B =+ [ Recv ''1'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sMV ''Text1'' |>+ , Recv ''text_2'' <| sMV ''Text2'', sMV ''Text3'' |>+ , Send ''2'' <| sMV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text3'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_2'', sAV ''B'', sMV ''Ra'',+ sN ''Rb'', sMV ''A'', sMV ''Text2''+ |>+ ( sPK ''B'' )+ |>+ , Recv ''5'' <| sMV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sN ''Rb'',+ sMV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text5''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_5'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sMV ''A'', sMV ''Text8''+ |>+ ( sMV ''pkA'' )+ |>+ ]"++role isoiec_9798_3_6_2_T+where "isoiec_9798_3_6_2_T =+ [ Recv ''3'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''B'',+ sMV ''Text4''+ |>+ , Recv ''text_4'' <| sMV ''Text5'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''T'', sMV ''A'', sMV ''Text7'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_6_opt_2_sig_4'', sMV ''Rpa'', sMV ''Rb'',+ sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ sMV ''Text5''+ |>+ ( sPK ''T'' )+ |>+ ]"++protocol isoiec_9798_3_6_2+where "isoiec_9798_3_6_2 =+{ isoiec_9798_3_6_2_A, isoiec_9798_3_6_2_B, isoiec_9798_3_6_2_T }"++locale restricted_isoiec_9798_3_6_2_state = isoiec_9798_3_6_2_state++type_invariant isoiec_9798_3_6_2_msc_typing for isoiec_9798_3_6_2+where "isoiec_9798_3_6_2_msc_typing = mk_typing+ [ ((isoiec_9798_3_6_2_B, ''A''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_6_2_T, ''A''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_6_2_T, ''B''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_6_2_B, ''Ra''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_6_2_A, ''Rb''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_T, ''Rb''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_6_2_B, ''Rpa''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_T, ''Rpa''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_6_2_B, ''T''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_A, ''Text1''), (KnownT isoiec_9798_3_6_2_A_text_1))+ , ((isoiec_9798_3_6_2_B, ''Text1''), (KnownT isoiec_9798_3_6_2_B_1))+ , ((isoiec_9798_3_6_2_A, ''Text2''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''Text2''), (KnownT isoiec_9798_3_6_2_B_text_2))+ , ((isoiec_9798_3_6_2_A, ''Text3''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_B, ''Text3''), (KnownT isoiec_9798_3_6_2_B_text_2))+ , ((isoiec_9798_3_6_2_A, ''Text4''), (KnownT isoiec_9798_3_6_2_A_text_3))+ , ((isoiec_9798_3_6_2_T, ''Text4''), (KnownT isoiec_9798_3_6_2_T_3))+ , ((isoiec_9798_3_6_2_A, ''Text5''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''Text5''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_T, ''Text5''), (KnownT isoiec_9798_3_6_2_T_text_4))+ , ((isoiec_9798_3_6_2_A, ''Text7''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_6_2_T, ''Text7''), (KnownT isoiec_9798_3_6_2_T_text_4))+ , ((isoiec_9798_3_6_2_A, ''Text8''), (KnownT isoiec_9798_3_6_2_A_text_5))+ , ((isoiec_9798_3_6_2_B, ''Text8''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_A, ''Text9''), (KnownT isoiec_9798_3_6_2_A_text_5))+ , ((isoiec_9798_3_6_2_B, ''Text9''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_A, ''TokenBA''), (KnownT isoiec_9798_3_6_2_A_2))+ , ((isoiec_9798_3_6_2_A, ''TokenTA''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_6_2_A, ''pkA''),+ (KnownT isoiec_9798_3_6_2_A_check_4_in))+ , ((isoiec_9798_3_6_2_B, ''pkA''), (KnownT isoiec_9798_3_6_2_B_5))+ , ((isoiec_9798_3_6_2_A, ''pkB''), (KnownT isoiec_9798_3_6_2_A_4))+ , ((isoiec_9798_3_6_2_B, ''pkB''), (KnownT isoiec_9798_3_6_2_B_5))+ ]"++sublocale isoiec_9798_3_6_2_state < isoiec_9798_3_6_2_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_6_2_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_6_2_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_6_2_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_6_2_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_6_2_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_A &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_B &+ ( tid1, isoiec_9798_3_6_2_B_2 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_2_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_B &+ RLKR(s(MV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_A &+ ( tid1, isoiec_9798_3_6_2_A_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text8'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_5'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(MV ''A'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_2_state) A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_T &+ ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(AV ''T'' tid0),+ LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |},+ {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_2'', s(AV ''B'' tid0),+ LN ''Ra'' tid0, s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''Text2'' tid0)+ |}+ ( inv(s(MV ''pkB'' tid0)) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(AV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_6_2_state) B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_6_2_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_6_2_B_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_6_2_T &+ ( tid1, isoiec_9798_3_6_2_T_4 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text5'' tid1)+ |} = {| s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),+ s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_6_opt_2_sig_4'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(MV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text5'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_7_1_A+where "isoiec_9798_3_7_1_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',+ sPK ''A'', sMV ''B'', sMV ''pkB'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sN ''Rpa'', sMV ''B'',+ sMV ''pkB'', sMV ''Text4''+ |>+ ( sPK ''T'' ),+ sMV ''TokenTA_for_B''+ |>+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',+ sAV ''T'', sMV ''TokenTA_for_B'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sMV ''Rb'', sN ''Ra'',+ sMV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sN ''Ra'', sMV ''Rb'',+ sAV ''A'', sMV ''B'', sMV ''Text8''+ |>+ ( sMV ''pkB'' )+ |>+ ]"++role isoiec_9798_3_7_1_B+where "isoiec_9798_3_7_1_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sN ''Rb'', sAV ''A'',+ sMV ''pkA'', sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_4'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sMV ''pkA'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_5'', sMV ''Ra'', sN ''Rb'',+ sAV ''A'', sAV ''B'', sMV ''Text8''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_7_1_T+where "isoiec_9798_3_7_1_T =+ [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text4'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_1'', sMV ''Rpa'', sMV ''B'',+ PAsymPK ( sMV ''B'' ), sMV ''Text4''+ |>+ ( sPK ''T'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_1_sig_3_2'', sMV ''Rb'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ]"++protocol isoiec_9798_3_7_1+where "isoiec_9798_3_7_1 =+{ isoiec_9798_3_7_1_A, isoiec_9798_3_7_1_B, isoiec_9798_3_7_1_T }"++locale restricted_isoiec_9798_3_7_1_state = isoiec_9798_3_7_1_state++type_invariant isoiec_9798_3_7_1_msc_typing for isoiec_9798_3_7_1+where "isoiec_9798_3_7_1_msc_typing = mk_typing+ [ ((isoiec_9798_3_7_1_T, ''A''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_1_A, ''B''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_T, ''B''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_1_B, ''Ra''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_A, ''Rb''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_T, ''Rb''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_1_B, ''Rpa''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_T, ''Rpa''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_1_B, ''T''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_A, ''Text1''), (KnownT isoiec_9798_3_7_1_A_1))+ , ((isoiec_9798_3_7_1_B, ''Text1''), (KnownT isoiec_9798_3_7_1_B_text_1))+ , ((isoiec_9798_3_7_1_A, ''Text2''), (KnownT isoiec_9798_3_7_1_A_text_2))+ , ((isoiec_9798_3_7_1_T, ''Text2''), (KnownT isoiec_9798_3_7_1_T_2))+ , ((isoiec_9798_3_7_1_B, ''Text3''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_T, ''Text3''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_7_1_A, ''Text4''), (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_1_T, ''Text4''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_7_1_A, ''Text5''), (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_1_T, ''Text5''), (KnownT isoiec_9798_3_7_1_T_text_3))+ , ((isoiec_9798_3_7_1_A, ''Text6''), (KnownT isoiec_9798_3_7_1_A_text_4))+ , ((isoiec_9798_3_7_1_B, ''Text6''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_A, ''Text7''), (KnownT isoiec_9798_3_7_1_A_text_4))+ , ((isoiec_9798_3_7_1_A, ''Text8''), (KnownT isoiec_9798_3_7_1_A_5))+ , ((isoiec_9798_3_7_1_B, ''Text8''), (KnownT isoiec_9798_3_7_1_B_text_5))+ , ((isoiec_9798_3_7_1_A, ''Text9''), (KnownT isoiec_9798_3_7_1_A_5))+ , ((isoiec_9798_3_7_1_B, ''Text9''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_A, ''TokenTA_for_B''),+ (KnownT isoiec_9798_3_7_1_A_3))+ , ((isoiec_9798_3_7_1_B, ''pkA''), (KnownT isoiec_9798_3_7_1_B_4))+ , ((isoiec_9798_3_7_1_A, ''pkB''), (KnownT isoiec_9798_3_7_1_A_3))+ ]"++sublocale isoiec_9798_3_7_1_state < isoiec_9798_3_7_1_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_7_1_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_7_1_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_7_1_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_7_1_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_7_1_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_B &+ ( tid1, isoiec_9798_3_7_1_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_5'', LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_1_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_A &+ ( tid1, isoiec_9798_3_7_1_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,+ s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_4'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),+ s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_1_state) A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_T &+ ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &+ {| s(MV ''B'' tid1), s(AV ''T'' tid1), s(MV ''Rpa'' tid1),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text4'' tid1)+ |} = {| s(MV ''B'' tid0), s(AV ''T'' tid0), LN ''Rpa'' tid0,+ s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_1'', LN ''Rpa'' tid0,+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text4'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_1_state) B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_1_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_1_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_1_T &+ ( tid1, isoiec_9798_3_7_1_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(AV ''T'' tid1), s(MV ''Rb'' tid1),+ PK ( s(MV ''A'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''T'' tid0), LN ''Rb'' tid0,+ s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_1_sig_3_2'', LN ''Rb'' tid0,+ s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++role isoiec_9798_3_7_2_A+where "isoiec_9798_3_7_2_A =+ [ Recv ''1'' <| sMV ''B'', sAV ''A'', sMV ''Rb'', sMV ''Text1'' |>+ , Recv ''text_2'' ( sMV ''Text2'' )+ , Send ''2'' <| sAV ''A'', sAV ''T'', sN ''Rpa'', sMV ''Rb'', sAV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''3'' <| sAV ''T'', sAV ''A'', sMV ''Text5'', sAV ''A'',+ sPK ''A'', sMV ''B'', sMV ''pkB'', sMV ''TokenTA''+ |>+ , Send ''check_3_out'' ( PEnc <| sC ''check_4'', sMV ''TokenTA'' |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''check_3_in'' ( PEnc <| sC ''check_4'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sN ''Rpa'', sMV ''Rb'',+ sAV ''A'', sMV ''pkA'', sMV ''B'', sMV ''pkB'', sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ( sN ''check_nonce_4'' )+ )+ , Recv ''text_4'' <| sMV ''Text6'', sMV ''Text7'' |>+ , Send ''4'' <| sAV ''A'', sMV ''B'', sN ''Rpa'', sMV ''Text7'',+ sAV ''T'', sMV ''TokenTA'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sMV ''Rb'', sN ''Ra'',+ sMV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sPK ''A'' )+ |>+ , Recv ''5'' <| sAV ''A'', sMV ''B'', sN ''Ra'', sMV ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sN ''Ra'', sMV ''Rb'',+ sAV ''A'', sMV ''B'', sMV ''Text8''+ |>+ ( sMV ''pkB'' )+ |>+ ]"++role isoiec_9798_3_7_2_B+where "isoiec_9798_3_7_2_B =+ [ Recv ''text_1'' ( sMV ''Text1'' )+ , Send ''1'' <| sAV ''B'', sAV ''A'', sN ''Rb'', sMV ''Text1'' |>+ , Recv ''4'' <| sAV ''A'', sAV ''B'', sMV ''Rpa'', sMV ''Text9'',+ sMV ''T'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sN ''Rb'',+ sAV ''A'', sMV ''pkA'', sAV ''B'', sMV ''pkB'', sMV ''Text3''+ |>+ ( PAsymPK ( sMV ''T'' ) ),+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_4'', sN ''Rb'', sMV ''Ra'',+ sAV ''B'', sAV ''A'', sMV ''Text6''+ |>+ ( sMV ''pkA'' )+ |>+ , Recv ''text_5'' <| sMV ''Text8'', sMV ''Text9'' |>+ , Send ''5'' <| sAV ''A'', sAV ''B'', sMV ''Ra'', sN ''Rb'',+ sMV ''Text9'',+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_5'', sMV ''Ra'', sN ''Rb'',+ sAV ''A'', sAV ''B'', sMV ''Text8''+ |>+ ( sPK ''B'' )+ |>+ ]"++role isoiec_9798_3_7_2_T+where "isoiec_9798_3_7_2_T =+ [ Recv ''2'' <| sMV ''A'', sAV ''T'', sMV ''Rpa'', sMV ''Rb'', sMV ''A'',+ sMV ''B'', sMV ''Text2''+ |>+ , Recv ''text_3'' <| sMV ''Text3'', sMV ''Text5'' |>+ , Send ''3'' <| sAV ''T'', sMV ''A'', sMV ''Text5'', sMV ''A'',+ PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ PSign <| sC ''isoiec_9798_3_7_opt_2_sig_3'', sMV ''Rpa'', sMV ''Rb'',+ sMV ''A'', PAsymPK ( sMV ''A'' ), sMV ''B'', PAsymPK ( sMV ''B'' ),+ sMV ''Text3''+ |>+ ( sPK ''T'' )+ |>+ ]"++protocol isoiec_9798_3_7_2+where "isoiec_9798_3_7_2 =+{ isoiec_9798_3_7_2_A, isoiec_9798_3_7_2_B, isoiec_9798_3_7_2_T }"++locale restricted_isoiec_9798_3_7_2_state = isoiec_9798_3_7_2_state++type_invariant isoiec_9798_3_7_2_msc_typing for isoiec_9798_3_7_2+where "isoiec_9798_3_7_2_msc_typing = mk_typing+ [ ((isoiec_9798_3_7_2_T, ''A''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_7_2_A, ''B''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_T, ''B''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_7_2_B, ''Ra''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_A, ''Rb''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_T, ''Rb''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_7_2_B, ''Rpa''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_T, ''Rpa''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_7_2_B, ''T''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_A, ''Text1''), (KnownT isoiec_9798_3_7_2_A_1))+ , ((isoiec_9798_3_7_2_B, ''Text1''), (KnownT isoiec_9798_3_7_2_B_text_1))+ , ((isoiec_9798_3_7_2_A, ''Text2''), (KnownT isoiec_9798_3_7_2_A_text_2))+ , ((isoiec_9798_3_7_2_T, ''Text2''), (KnownT isoiec_9798_3_7_2_T_2))+ , ((isoiec_9798_3_7_2_A, ''Text3''),+ (KnownT isoiec_9798_3_7_2_A_check_3_in))+ , ((isoiec_9798_3_7_2_B, ''Text3''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_T, ''Text3''), (KnownT isoiec_9798_3_7_2_T_text_3))+ , ((isoiec_9798_3_7_2_A, ''Text5''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_7_2_T, ''Text5''), (KnownT isoiec_9798_3_7_2_T_text_3))+ , ((isoiec_9798_3_7_2_A, ''Text6''), (KnownT isoiec_9798_3_7_2_A_text_4))+ , ((isoiec_9798_3_7_2_B, ''Text6''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_A, ''Text7''), (KnownT isoiec_9798_3_7_2_A_text_4))+ , ((isoiec_9798_3_7_2_A, ''Text8''), (KnownT isoiec_9798_3_7_2_A_5))+ , ((isoiec_9798_3_7_2_B, ''Text8''), (KnownT isoiec_9798_3_7_2_B_text_5))+ , ((isoiec_9798_3_7_2_A, ''Text9''), (KnownT isoiec_9798_3_7_2_A_5))+ , ((isoiec_9798_3_7_2_B, ''Text9''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_A, ''TokenTA''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_7_2_A, ''pkA''),+ (KnownT isoiec_9798_3_7_2_A_check_3_in))+ , ((isoiec_9798_3_7_2_B, ''pkA''), (KnownT isoiec_9798_3_7_2_B_4))+ , ((isoiec_9798_3_7_2_A, ''pkB''), (KnownT isoiec_9798_3_7_2_A_3))+ , ((isoiec_9798_3_7_2_B, ''pkB''), (KnownT isoiec_9798_3_7_2_B_4))+ ]"++sublocale isoiec_9798_3_7_2_state < isoiec_9798_3_7_2_msc_typing_state+proof -+ have "(t,r,s) : approx isoiec_9798_3_7_2_msc_typing"+ proof(cases rule: reachable_in_approxI_ext+ [OF isoiec_9798_3_7_2_msc_typing.monoTyp, completeness_cases_rule])+ case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ next+ case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ next+ case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this+ then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s+ by unfold_locales auto+ show ?case using facts+ by (fastforce intro: event_predOrdI split: if_splits)+ qed+ thus "isoiec_9798_3_7_2_msc_typing_state t r s" by unfold_locales auto+qed++text{* Prove secrecy of long-term keys. *}+context isoiec_9798_3_7_2_state begin++ (* This rule is unsafe in general, but OK here, + as we are only reasoning about static compromise. + *)+ lemma static_longterm_key_reveal[dest!]:+ "predOrd t (LKR a) e ==> RLKR a : reveals t"+ by (auto intro: compr_predOrdI)++ lemma longterm_private_key_secrecy:+ assumes facts:+ "SK m : knows t"+ "RLKR m ~: reveals t"+ shows "False"+ using facts by (sources "SK m")++ lemma longterm_sym_ud_key_secrecy:+ assumes facts:+ "K m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ shows "False"+ using facts by (sources "K m1 m2")++ lemma longterm_sym_bd_key_secrecy:+ assumes facts:+ "Kbd m1 m2 : knows t"+ "RLKR m1 ~: reveals t"+ "RLKR m2 ~: reveals t"+ "m1 : Agent"+ "m2 : Agent"+ shows "False"+ proof -+ from facts + have "KShr (agents {m1, m2}) : knows t"+ by (auto simp: Kbd_def)+ thus ?thesis using facts+ proof (sources "KShr (agents {m1, m2})")+ qed (auto simp: agents_def Agent_def)+ qed++ lemmas ltk_secrecy =+ longterm_sym_ud_key_secrecy+ longterm_sym_ud_key_secrecy[OF in_knows_predOrd1]+ longterm_sym_bd_key_secrecy+ longterm_sym_bd_key_secrecy[OF in_knows_predOrd1]+ longterm_private_key_secrecy+ longterm_private_key_secrecy[OF in_knows_predOrd1]++end++lemma (in restricted_isoiec_9798_3_7_2_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_A_5 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_B &+ ( tid1, isoiec_9798_3_7_2_B_5 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text8'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text8'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_5'', LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0),+ s(MV ''Text8'' tid0)+ |}+ ( SK ( s(MV ''B'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_2_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_A &+ ( tid1, isoiec_9798_3_7_2_A_4 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text6'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text6'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_4'', LN ''Rb'' tid0,+ s(MV ''Ra'' tid0), s(AV ''B'' tid0), s(AV ''A'' tid0),+ s(MV ''Text6'' tid0)+ |}+ ( SK ( s(AV ''A'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_2_state) A_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_A &+ RLKR(s(AV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_A_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_T &+ ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), s(AV ''T'' tid0),+ LN ''Rpa'' tid0, s(MV ''Rb'' tid0), s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''check_4'',+ {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |},+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) )+ |}+ ( LN ''check_nonce_4'' tid0 ) ")+ case fake note_unified facts = this facts+ thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")+ qed (insert facts, fastforce+)?+ next+ case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,+ s(MV ''Rb'' tid0), s(AV ''A'' tid0), s(MV ''pkA'' tid0),+ s(MV ''B'' tid0), s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(AV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_3_7_2_state) B_injective_agreement_T:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_3_7_2_B &+ RLKR(s(MV ''T'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_3_7_2_B_4 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_3_7_2_T &+ ( tid1, isoiec_9798_3_7_2_T_3 ) : steps t &+ {| s(MV ''A'' tid1), s(MV ''B'' tid1), s(AV ''T'' tid1),+ s(MV ''Rpa'' tid1), s(MV ''Rb'' tid1), PK ( s(MV ''A'' tid1) ),+ PK ( s(MV ''B'' tid1) ), s(MV ''Text3'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''T'' tid0),+ s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''pkA'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Enc {| LC ''isoiec_9798_3_7_opt_2_sig_3'', s(MV ''Rpa'' tid0),+ LN ''Rb'' tid0, s(AV ''A'' tid0), s(MV ''pkA'' tid0), s(AV ''B'' tid0),+ s(MV ''pkB'' tid0), s(MV ''Text3'' tid0)+ |}+ ( SK ( s(MV ''T'' tid0) ) ) ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy view
@@ -1,6 +1,6 @@ theory "isoiec-9798-4-bdkey_cert_auto" imports- "../ESPLogic"+ "ESPLogic" begin role isoiec_9798_4_1_bdkey_A@@ -55,37 +55,37 @@ then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_1_bdkey_msc_typing_state t r s" by unfold_locales auto qed@@ -165,11 +165,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_1_bdkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed role isoiec_9798_4_2_bdkey_A@@ -229,43 +229,43 @@ then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_2_bdkey_msc_typing_state t r s" by unfold_locales auto qed@@ -322,34 +322,54 @@ end -lemma (in restricted_isoiec_9798_4_2_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_2_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_2_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_2_bdkey_A &- ( tid1, isoiec_9798_4_2_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_2_bdkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_2_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_2_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_2_bdkey_A &+ ( tid1, isoiec_9798_4_2_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(AV ''B'' tid0),- s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(AV ''B'' tid0),+ s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed role isoiec_9798_4_3_bdkey_A@@ -428,67 +448,67 @@ then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_3_bdkey_msc_typing_state t r s" by unfold_locales auto qed@@ -568,11 +588,11 @@ s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_B_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed lemma (in restricted_isoiec_9798_4_3_bdkey_state) B_non_injective_agreement:@@ -598,11 +618,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed role isoiec_9798_4_4_bdkey_A@@ -684,73 +704,73 @@ then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_4_bdkey_msc_typing_state t r s" by unfold_locales auto qed@@ -807,93 +827,133 @@ end -lemma (in restricted_isoiec_9798_4_4_bdkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_bdkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_bdkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_bdkey_B &- ( tid1, isoiec_9798_4_4_bdkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_4_bdkey_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_bdkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_bdkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_bdkey_B &+ ( tid1, isoiec_9798_4_4_bdkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,- s(MV ''Text4'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts- hence "Kbd ( s(AV ''A'' tid1) )- ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"- by simp note facts = this facts- thus ?thesis proof(cases rule: Kbd_cases)- case noswap note_unified facts = this facts+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,+ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next- case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- next- case swapped note_unified facts = this facts+ case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts+ hence "Kbd ( s(AV ''A'' tid1) )+ ( s(AV ''B'' tid1) ) = Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) )"+ by simp note facts = this facts+ thus ?thesis proof(cases rule: Kbd_cases)+ case noswap note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(AV ''B'' tid1), s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ next+ case swapped note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj)+qed++lemma (in restricted_isoiec_9798_4_4_bdkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_bdkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_bdkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_bdkey_A &+ ( tid1, isoiec_9798_4_4_bdkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs")+proof -+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(AV ''A'' tid0), s(MV ''Text2'' tid1)+ Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next- case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (fastsimp+)?- qed (insert facts, fastsimp+)?-qed--lemma (in restricted_isoiec_9798_4_4_bdkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_bdkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_bdkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_bdkey_A &- ( tid1, isoiec_9798_4_4_bdkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(AV ''B'' tid0), s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy view
@@ -1,6 +1,6 @@ theory "isoiec-9798-4-udkey_cert_auto" imports- "../ESPLogic"+ "ESPLogic" begin role isoiec_9798_4_1_udkey_A@@ -55,37 +55,37 @@ then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_1_udkey_msc_typing_state t r s" by unfold_locales auto qed@@ -164,11 +164,11 @@ LC ''isoiec_9798_4_1_ccf_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_1_udkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed role isoiec_9798_4_2_udkey_A@@ -228,43 +228,43 @@ then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_2_udkey_msc_typing_state t r s" by unfold_locales auto qed@@ -321,33 +321,53 @@ end -lemma (in restricted_isoiec_9798_4_2_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_2_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_2_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_2_udkey_A &- ( tid1, isoiec_9798_4_2_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_2_udkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_2_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_2_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_2_udkey_A &+ ( tid1, isoiec_9798_4_2_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed role isoiec_9798_4_3_udkey_A@@ -426,67 +446,67 @@ then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_3_udkey_msc_typing_state t r s" by unfold_locales auto qed@@ -565,11 +585,11 @@ LC ''isoiec_9798_4_3_ccf_2'', s(MV ''TNb'' tid0), s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_B_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed lemma (in restricted_isoiec_9798_4_3_udkey_state) B_non_injective_agreement:@@ -594,11 +614,11 @@ LC ''isoiec_9798_4_3_ccf_1'', s(MV ''TNa'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)+ thus ?thesis by (fastforce dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_A_1_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)? qed role isoiec_9798_4_4_udkey_A@@ -678,73 +698,73 @@ then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) note facts = this then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_4_udkey_msc_typing_state t r s" by unfold_locales auto qed@@ -801,74 +821,114 @@ end -lemma (in restricted_isoiec_9798_4_4_udkey_state) A_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_udkey_A"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(MV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_udkey_A_3 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_udkey_B &- ( tid1, isoiec_9798_4_4_udkey_B_3 ) : steps t &- {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,- s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)- |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,- s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_4_udkey_state) A_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_udkey_A &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(MV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_udkey_A_3 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_udkey_B &+ ( tid1, isoiec_9798_4_4_udkey_B_3 ) : steps t &+ {| s(AV ''A'' tid1), s(AV ''B'' tid1), s(MV ''Ra'' tid1), LN ''Rb'' tid1,+ s(MV ''Text2'' tid1), s(MV ''Text4'' tid1)+ |} = {| s(AV ''A'' tid0), s(MV ''B'' tid0), LN ''Ra'' tid0,+ s(MV ''Rb'' tid0), s(MV ''Text2'' tid0), s(MV ''Text4'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,- s(MV ''Text4'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},- LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,- s(MV ''Text2'' tid1)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_3'', s(MV ''Rb'' tid0), LN ''Ra'' tid0,+ s(MV ''Text4'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', LN ''Ra'' tid0, LN ''Rb'' tid1,+ s(MV ''Text2'' tid1)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed -lemma (in restricted_isoiec_9798_4_4_udkey_state) B_non_injective_agreement:- assumes facts:- "roleMap r tid0 = Some isoiec_9798_4_4_udkey_B"- "RLKR(s(AV ''A'' tid0)) ~: reveals t"- "RLKR(s(AV ''B'' tid0)) ~: reveals t"- "( tid0, isoiec_9798_4_4_udkey_B_2 ) : steps t"- shows- "(? tid1.- roleMap r tid1 = Some isoiec_9798_4_4_udkey_A &- ( tid1, isoiec_9798_4_4_udkey_A_2 ) : steps t &- {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),- s(MV ''Text2'' tid1)- |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),- LN ''Rb'' tid0, s(MV ''Text2'' tid0)- |})"+lemma (in restricted_isoiec_9798_4_4_udkey_state) B_injective_agreement:+ "let+ prems =+ (% tid0.+ roleMap r tid0 = Some isoiec_9798_4_4_udkey_B &+ RLKR(s(AV ''A'' tid0)) ~: reveals t &+ RLKR(s(AV ''B'' tid0)) ~: reveals t &+ ( tid0, isoiec_9798_4_4_udkey_B_2 ) : steps t);+ concs =+ (% tid0 tid1.+ roleMap r tid1 = Some isoiec_9798_4_4_udkey_A &+ ( tid1, isoiec_9798_4_4_udkey_A_2 ) : steps t &+ {| s(AV ''A'' tid1), s(MV ''B'' tid1), LN ''Ra'' tid1, s(MV ''Rb'' tid1),+ s(MV ''Text2'' tid1)+ |} = {| s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Ra'' tid0),+ LN ''Rb'' tid0, s(MV ''Text2'' tid0)+ |})+ in ? f. inj_on f (Collect prems) & (! i. prems i --> concs i (f i))"+ (is "let prems = ?prems; concs = ?concs in ?P prems concs") proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! "- Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},- LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,- s(MV ''Text2'' tid0)- |} ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest!: ltk_secrecy)- next- case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts- thus ?thesis by (fastsimp intro: event_predOrdI split: if_splits)- qed (insert facts, fastsimp+)?+ { fix tid0 tid1+ assume facts: "?prems tid0"+ have " ? tid1. ?concs tid0 tid1"+ proof -+ note_unified facts = facts+ note_prefix_closed facts = facts+ thus ?thesis proof(sources! "+ Hash {| {| LC ''CCF'', K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) |},+ LC ''isoiec_9798_4_4_ccf_2'', s(MV ''Ra'' tid0), LN ''Rb'' tid0,+ s(MV ''Text2'' tid0)+ |} ")+ case fake note_unified facts = this facts+ thus ?thesis by (fastforce dest!: ltk_secrecy)+ next+ case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts+ thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)+ qed (insert facts, fastforce+)?+ qed+ }+ note niagree = this+ { fix i1 i2 j+ assume "?concs i1 j & ?concs i2 j"+ note_unified facts = this+ have "i1 = i2" using facts by simp+ }+ note conc_inj = this+ show ?thesis+ by (fast intro!: iagree_to_niagree elim!: niagree conc_inj) qed end
data/isabelle/AUTHORS view
@@ -1,4 +1,8 @@-Simon Meier <meiersi@inf.ethz.ch>+Simon Meier <iridcode@gmail.com>++Port to Isabelle 2013:+----------------------+Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch> Student contributor: ---------------------
− data/isabelle/IsaMakefile
@@ -1,31 +0,0 @@--## targets--default: ESPL-images: ESPL-test: --all: images test---## global settings--SRC = $(ISABELLE_HOME)/src-OUT = $(ISABELLE_OUTPUT)-LOG = $(OUT)/log--USEDIR = $(ISABELLE_TOOL) usedir -v true -i true ## -d pdf ## -D generated---## ESPL--ESPL: $(OUT)/ESPL--$(OUT)/ESPL: ## ROOT.ML document/root.tex src/*.thy src/ESPLogic/*.thy src/ESPLogic/*.ML- @$(USEDIR) -b -P http://isabelle.in.tum.de/library HOL ESPL---## clean--clean:- @rm -f $(OUT)/ESPL
data/isabelle/Makefile view
@@ -26,12 +26,11 @@ # The following commands require #-# a working installation of Isabelle2009-1+# a working installation of Isabelle2013 # (http://www.cl.cam.ac.uk/research/hvg/Isabelle/). # # build an image of the ESPL formalization in Isabelle. This is required for # the 'scyther-proof --isabelle' switch to work. espl-image:- isabelle make clean- isabelle make+ isabelle build -cb -d . ESPL
data/isabelle/README view
@@ -1,10 +1,9 @@ README: The scyther-proof security protocol verification tool ============================================================= -Author: Simon Meier <simon.meier@inf.ethz.ch>--Creation Date: 13/05/2011 -- Last Updated: 28/06/2012-+Authors: Simon Meier <iridcode@gmail.com>+Creation Date: 2011-05-13+Last Updated: 2013-02-27 by Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch> 1. Introduction ===============@@ -56,42 +55,48 @@ 2.2 Installing the Isabelle/HOL theories ---------------------------------------- -Download and install full Isabelle2009-1 according to the installation+Download and install full Isabelle2013 according to the installation instructions at - http://isabelle.in.tum.de/website-Isabelle2009-1/download_x86-linux.html+ http://isabelle.in.tum.de/website-Isabelle2013/download_x86-linux.html The first time you call `scyther-proof` with the `--isabelle` flag it will build the logic image of the Isabelle/HOL theories formalizing the security protocol verification theory underlying `scyther-proof`. -For enabling interactive processing of theory files based using our-extensions to Isabelle's ISAR proof language use one of the following two-variants.+If you wish to use ProofGeneral to interactively process the theory files+using our extensions to Isabelle's ISAR proof language, use one of the+following two variants. This is needed in order to make the new ISAR keywords+`role`, `protocol`, `sources`, and `prefix_close` available in the Emacs+frontend. If you are using the Isabelle/jEdit Prover IDE, the keywords are+automatically registered. + Variant a: Brute Force ---------------------- -Overwrite the standard Emacs keywords file+Copy the Emacs keywords file provided with the ESPL distribution at - $ISABELLE_HOME/etc/isar-keywords.el+ $SCYTHER_PROOF_HOME/data/isabelle/src/isar-keywords.el -with the Emacs keywords file provided with the ESPL distribution.+to your local Isabelle configuration in - $SCYTHER_PROOF_HOME/isabelle/src/isar-keywords.el+ $ISABELLE_HOME_USER/etc -This is needed in order to make the new ISAR keywords `role`,-`protocol`, `sources`, and `prefix_close` available in the Emacs-frontend.+This will replace any custom keyword file that you have already+installed in that way. You can find out about $ISABELLE_HOME_USER+by running + isabelle getenv ISABELLE_HOME_USER + Variant b: Elegance ------------------- A more elegant way is to copy the keywords file provided with our distribution to - $ISABELLE_HOME/etc/isar-keywords-ESPL.el+ $ISABELLE_HOME_USER/etc/isar-keywords-ESPL.el and start Isabelle using the -k switch as follows. @@ -104,7 +109,7 @@ 3.1 scyther-proof-------------+----------------- Usage Example@@ -120,15 +125,13 @@ all specified security properties together with the proof with the fewest number of chain rule applications to stdout. - In order to generate an Isabelle proof script two additional options need to- be added+ To generate an Isabelle proof script, two additional options are required. scyther-proof $EXAMPLE_DIR/classic/NS_Public.spthy --shortest --output=nsl_cert.thy --ASCII The first one specifies the output file and the second one instructs scyther-proof to use Isabelle's ASCII notation as the output format. - To build the source code documentation you can use the call cabal configure; cabal haddock@@ -141,25 +144,40 @@ 3.2 The Isabelle/HOL theories ----------------------------- + Note that in many case the easiest way to start with constructing+ machine-checked proofs interactively is to use a proof script generated by+ scyther-proof.++ Using ProofGeneral+ ------------------+ In the directory output by scyther-proof, load the Tutorial on interactive proof construction using the following commands cd <theory-dir-output-by-scytherproof>/src isabelle emacs Tutorial.thy - or if you've chosen the elegant variant+ or if you've chosen the elegant variant for the keywords file isabelle emacs -k ESPL Tutorial.thy - Note that in many case the easiest way to start with constructing- machine-checked proofs interactively is to use a proof script generated by- scyther-proof. + Using the Isabelle/jEdit Prover IDE+ ----------------------------------- + In the directory output by scyther-proof, load the Tutorial on interactive+ proof construction using the following commands++ cd <theory-dir-output-by-scytherproof>/src+ isabelle jedit -d $SCYTHER_PROOF_HOME/data/isabelle -l ESPL Tutorial.thy++ where $SCYTHER_PROOF_HOME expands to the home directory of scyther-proof.++ *** `Happy Proving :)` -In case of questions do not hesistate to contact me at+In case of questions do not hesistate to contact Simon Meier at iridcode@gmail.com.
+ data/isabelle/ROOT view
@@ -0,0 +1,2 @@+session ESPL = HOL ++ theories "src/ESPLogic"
− data/isabelle/ROOT.ML
@@ -1,1 +0,0 @@-use_thy "src/ESPLogic"
data/isabelle/src/ESPLogic/Automation.thy view
@@ -15,11 +15,13 @@ Syntax InferenceRules WeakTyping-uses- espl_definitions- espl_methods+keywords "role" "protocol" "type_invariant" :: thy_decl+ and "prefix_close" :: prf_decl begin +ML_file "espl_definitions.ML"+ML_file "espl_methods.ML"+ section{* Automation *} subsection{* Setup of ISAR commands *}@@ -153,235 +155,5 @@ "(LKR (Lit (EveNonce i))) \<prec> e \<Longrightarrow> False" "e \<prec> (LKR (Lit (EveNonce i))) \<Longrightarrow> False" by(auto dest: predOrd_LKR_agent1 predOrd_LKR_agent2)---subsection{* Testing the Infrastructure *}---(*-text{*- Commented out because new ISAR syntax comes only active after- the theory file that defines them.-*}--role C-where "C =- [ Send ''1'' ( PEnc ( sN ''k'' ) ( sPK ''S'' ) )- , Recv ''2'' ( PHash ( sN ''k'' ) )- , Note ''3'' SessKey (sN ''k'')- ]"--role S-where "S =- [ Recv ''1'' ( PEnc ( sMV ''k'' ) ( sPK ''S'' ) )- , Send ''2'' ( PHash ( sMV ''k'' ) )- ]"--protocol CR-where "CR = { C, S }"--locale restricted_CR_state = CR_state--type_invariant auto_msc_typing for CR-where "auto_msc_typing = mk_typing- [ ((S, ''k''), (SumT (KnownT S_1) (NonceT C ''k'')))- ]"---lemma additional_reveal_order:- assumes facts:- "predOrd t (LKR a) c"- shows - "a \<in> lkreveals t \<and> predOrd t (LKR a) c"-using facts-by(auto intro: event_predOrdI)--sublocale CR_state < auto_msc_typing_state-proof -- have "(t,r,s) : approx auto_msc_typing"- proof(cases rule: reachable_in_approxI_ext- [OF auto_msc_typing.monoTyp, completeness_cases_rule])- case (S_1_k t r s tid0) note facts = this- then interpret state: auto_msc_typing_state t r s- by unfold_locales auto- show ?case using facts- proof(sources! "- Enc ( s(MV ''k'' tid0) ) ( PK ( s(AV ''S'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?- qed- thus "auto_msc_typing_state t r s" by unfold_locales auto-qed--lemma (in restricted_CR_state) C_k_order_raw:- assumes facts:- "roleMap r tid0 = Some C"- shows- "LN ''k'' tid0 \<in> knows t \<longrightarrow>- (LKR (s(AV ''S'' tid0))) \<prec> (Ln (LN ''k'' tid0)) \<or> - (St (tid0, C_3) \<prec> (Ln (LN ''k'' tid0)))" - (is "?knows \<longrightarrow> ?order")-proof- assume "?knows"- thus "?order" using facts- proof (sources "LN ''k'' tid0")- case C_1_k- thus ?thesis- by (sources "SK (s (AV ''S'' tid0))") (fastsimp intro: event_predOrdI)+- qed auto-qed--(*-lemmas (in restricted_CR_state) C_k_order = C_k_order_raw[rule_format, THEN additional_reveal_order]-*)--lemma (in restricted_CR_state) C_k_secrecy:- assumes facts:- "roleMap r tid0 = Some C"- "s(AV ''S'' tid0) ~: lkreveals t"- "(tid0, C_3) \<notin> steps t"- "LN ''k'' tid0 : knows t"- shows "False"-using facts -by(fastsimp dest: C_k_order_raw[rule_format] - intro: event_predOrdI)---*)---(*-text{*- Commented out because new ISAR syntax comes only active after- the theory file that defines them.-*}--text{* Testing the role definition command *}-role I-where "I \<equiv> - [ Send ''0'' (PEnc \<langle>sLC ''0'', sAV ''I'', sN ''ni''\<rangle> (sPK ''R''))- , Recv ''1'' (PEnc \<langle>sLC ''1'', sAV ''R'', sN ''ni'', sMV ''nr''\<rangle> (sPK ''I''))- , Send ''2'' (PEnc \<langle>sLC ''2'', sMV ''nr''\<rangle> (sPK ''R''))- ]"--text{* A few of the proven theorems: *}-thm I.weakly_atomic_convs-thm I_def-thm I.unfold-thm I.wf_role-thm I.distinct_steps-thm I.in_set_conv-thm I.zip_conv-thm I.prefixClose_convs--thm I_1_def-thm I_1.unfold-thm I_1_pt_def-thm I_1.inst_conv-thm I_1.sendStep_conv-thm I_1.stepPat_conv-thm I_1.FV_conv-thm I_1.FMV_conv--text{* - Note that you should not need to use these theorems manually as the - simplifier and the classical reasoner are already setup such that- they are used when appropriate.-- The general design idea behind the rules is such that wherever possible- constants are not unfolded, as this simplifies proof states.-*}--text{* An additional role for testing purposes. *}-role R-where "R \<equiv>- [ Recv ''0'' (PEnc \<langle>sLC ''0'', sLAV ''I'', sLMV ''ni''\<rangle> (sPK ''R''))- , Send ''1'' (PEnc \<langle>sLC ''1'', sLAV ''R'', sLMV ''ni'', sLN ''nr''\<rangle> (sPK ''I''))- , Recv ''2'' (PEnc \<langle>sLC ''2'', sLN ''nr''\<rangle> (sPK ''R''))- ]"--thm R.weakly_atomic_convs--protocol nsl-where "nsl = {I, R}"--text{* Testing the protocol definition command; the generated theorems: *}-thm nsl_def-thm nsl.unfold-thm nsl.wf_proto-thm nsl.distinct_roles-thm nsl.in_set_conv--type_invariant typed_nsl for nsl-where "typed_nsl = mk_typing- [ ((R, ''ni''), (SumT (KnownT R_0) (NonceT I ''ni'')))- , ((I, ''nr''), (SumT (KnownT I_1) (NonceT R ''nr'')))- ]"---sublocale nsl_state \<subseteq> typed_nsl_state-proof -- have "(t,r,s) \<in> approx typed_nsl"- proof(cases rule: reachable_in_approxI_ext- [OF typed_nsl.monoTyp, completeness_cases_rule])- case (I_1_nr t r s i)- then interpret state: typed_nsl_state t r s- by unfold_locales auto- show ?case using I_1_nr- proof(sources "inst s i I_1_pt")- qed (fastsimp intro: event_predOrdI split: if_splits)+- next- case (R_0_ni t r s i)- then interpret state: typed_nsl_state t r s- by unfold_locales auto- show ?case using R_0_ni- proof(sources "inst s i R_0_pt")- qed (fastsimp intro: event_predOrdI split: if_splits)+- qed- thus "typed_nsl_state t r s" by unfold_locales auto-qed--context nsl_state begin- lemma longterm_private_key_secrecy:- assumes facts:- "SK m : knows t"- "m ~: Compromised"- shows "False"- using facts by (sources "SK m")-- lemma longterm_shared_key_secrecy:- assumes facts:- "K m1 m2 : knows t"- "m1 ~: Compromised"- "m2 ~: Compromised"- shows "False"- using facts by (sources "K m1 m2")-- lemmas ltk_secrecy =- longterm_shared_key_secrecy- longterm_shared_key_secrecy[OF in_knows_predOrd1]- longterm_private_key_secrecy- longterm_private_key_secrecy[OF in_knows_predOrd1]-end--lemma (in nsl_state) I_ni_secrecy:- assumes facts:- "roleMap r i = Some I"- "LN ''ni'' i \<in> knows t"- "s (AV ''I'' i) \<notin> lkreveals t"- "s (AV ''R'' i) \<notin> lkreveals t" - shows "False"-using facts proof(sources " LN ''ni'' tid0 ")- case I_0_ni thus ?thesis by (fastsimp dest!: ltk_secrecy)-next- case (R_1_ni tid1) thus ?thesis - proof(sources "inst s tid1 R_0_pt")- case I_0_enc thus ?thesis - by (fastsimp dest!: ltk_secrecy)- qed (insert facts, (((clarsimp, order?) | order))+)?-qed---*)- end
data/isabelle/src/ESPLogic/Capabilities.thy view
@@ -19,7 +19,7 @@ chapter{* Compromising Adversary Capability *} section{* Partnering *}-types partnering = "state \<Rightarrow> (tid \<times> tid) set"+type_synonym partnering = "state \<Rightarrow> (tid \<times> tid) set" definition unionPart :: "partnering \<Rightarrow> partnering \<Rightarrow> partnering" (infix "UNP" 65)@@ -31,7 +31,7 @@ lemma union_unionPart_conv: "(a \<in> ((P1 \<union>\<^isub>P P2) q)) = (a \<in> (P1 q \<union> P2 q))"-by (fastsimp simp add: unionPart_def)+by (fastforce simp add: unionPart_def) definition mk_partnering :: "role \<Rightarrow> role \<Rightarrow> (pattern \<times> pattern \<times> rolestep) set \<Rightarrow> partnering"@@ -44,10 +44,10 @@ "((i,j) \<in> mk_partnering R1 R2 conds (t,r,s)) = (roleMap r i = Some R1 \<and> roleMap r j = Some R2 \<and> (\<forall> (p1,p2,st) \<in> conds. (j,st) \<in> steps t \<longrightarrow> (inst s i p1) = (inst s j p2)))"-by (fastsimp simp add: mk_partnering_def)+by (fastforce simp add: mk_partnering_def) lemma setEqImpTupleIn: "(X = Y) \<Longrightarrow> ((i,j) \<in> X) = ((i,j) \<in> Y)"-by fastsimp+by fastforce lemma uniquePartner: assumes facts:@@ -59,15 +59,15 @@ "\<forall> j'. (i,j') \<in> mk_partnering R1 R2 conds (t,r,s) \<and> (j',st) \<in> steps t \<longrightarrow> j' = j" proof - have "inst s i pt1 = inst s j pt2"- using facts by (fastsimp simp add: mk_partnering_conv)+ using facts by (fastforce simp add: mk_partnering_conv) moreover hence "\<forall> j'. j' \<noteq> j \<longrightarrow> inst s j pt2 \<noteq> inst s j' pt2"- using facts by fastsimp+ using facts by fastforce ultimately have "\<forall> j'. j' \<noteq> j \<longrightarrow> inst s i pt1 \<noteq> inst s j' pt2"- by fastsimp+ by fastforce hence "\<forall> j'. (j' \<noteq> j \<and> (j',st) \<in> steps t) \<longrightarrow> (i,j') \<notin> mk_partnering R1 R2 conds (t,r,s)"- using facts by (fastsimp simp add: mk_partnering_conv)+ using facts by (fastforce simp add: mk_partnering_conv) thus ?thesis by auto qed@@ -78,11 +78,11 @@ shows "roleMap r i = Some R1 \<and> roleMap r j = Some R2" using facts-by (fastsimp simp add: mk_partnering_conv)+by (fastforce simp add: mk_partnering_conv) section{* Capabilities *} -types capability = "state \<Rightarrow> reveal set"+type_synonym capability = "state \<Rightarrow> reveal set" subsection{* Helper Functions *} definition interCap :: "capability \<Rightarrow> capability \<Rightarrow> capability" (infix "INC" 65)@@ -101,11 +101,11 @@ lemma union_unionCap_conv: "(a \<in> ((C1 \<union>\<^isub>C C2) q)) = (a \<in> (C1 q \<union> C2 q))"-by (fastsimp simp add: unionCap_def)+by (fastforce simp add: unionCap_def) lemma inter_interCap_conv: "(a \<in> ((C1 \<inter>\<^isub>C C2) q)) = (a \<in> (C1 q \<inter> C2 q))"-by (fastsimp simp add: interCap_def)+by (fastforce simp add: interCap_def) subsection{* Adversary-Compromise Model *}@@ -119,13 +119,13 @@ (t,r,s) \<in> acm caps ; reveal \<in> reveals t \<rbrakk> \<Longrightarrow> \<exists> cap \<in> caps. reveal \<in> cap (t,r,s)"-by(fastsimp simp add: acm_def)+by(fastforce simp add: acm_def) lemma acm_monotone: "\<lbrakk> (t,r,s) \<in> acm caps \<rbrakk> \<Longrightarrow> (t,r,s) \<in> acm (caps \<union> caps')"-by(fastsimp simp add: acm_def)+by(fastforce simp add: acm_def) subsection{* Implementation of Capabilities and Dot-Mapping *} @@ -183,7 +183,7 @@ "RCompr a b \<notin> LKRactor i c (t,r,s)" "RCompr a b \<notin> LKRafter i (t,r,s)" "RCompr a b \<notin> LKRafterCorrect i ps(t,r,s)"-by(fastsimp)++by(fastforce)+ subsubsection{* Compromises *}@@ -230,20 +230,20 @@ "RCompr RandGen j \<notin> SkR i ps q" "RCompr State j \<notin> RNR q" "RCompr SessKey j \<notin> RNR q"-by(fastsimp simp add: StR_def SkR_def RNR_def)++by(fastforce simp add: StR_def SkR_def RNR_def)+ lemma SkR_conv[simp]: "c \<in> SkR i ps (t,r,s) = (\<exists> j. (c = RCompr SessKey j) \<and> (i,j) \<notin> ps (t,r,s) \<and> j \<noteq> i )"-by(fastsimp simp add: SkR_def)+by(fastforce simp add: SkR_def) lemma RNR_conv[simp]: "c \<in> RNR (t,r,s) = (\<exists> j. (c = RCompr RandGen j))"-by(fastsimp simp add: RNR_def)+by(fastforce simp add: RNR_def) lemma StR_conv[simp]: "c \<in> StR i ps (t,r,s) = (\<exists> j. (c = RCompr State j) \<and> (i,j) \<notin> ps (t,r,s) \<and> j \<noteq> i )"-by(fastsimp simp add: StR_def)+by(fastforce simp add: StR_def) lemma (in reachable_state) LKRafterTrans:@@ -253,6 +253,6 @@ RLKR a \<in> LKRafter i (t,r,s); LKR a \<prec> St (i,st) \<rbrakk> \<Longrightarrow> False"-by(fastsimp)+by(fastforce) end
data/isabelle/src/ESPLogic/DistinctList.thy view
@@ -210,10 +210,10 @@ by(auto dest: next_imp_less) lemma in_set_less1: "x \<prec> y \<Longrightarrow> x \<in> set xs"- by(simp add: pred_def in_set_listOrd1)+ by(simp add: in_set_listOrd1) lemma in_set_less2: "x \<prec> y \<Longrightarrow> y \<in> set xs"- by(simp add: pred_def in_set_listOrd2)+ by(simp add: in_set_listOrd2) lemmas in_set_next1 = in_set_less1[OF next_imp_less, rule_format] lemmas in_set_next2 = in_set_less2[OF next_imp_less, rule_format]
data/isabelle/src/ESPLogic/ExecMessage.thy view
@@ -43,7 +43,7 @@ translations "{|x, y, z|}" == "{|x, {|y, z|}|}"- "{|x, y|}" == "Tup x y"+ "{|x, y|}" == "(CONST Tup) x y" text{* @@ -85,7 +85,7 @@ lemma Kbd_split_inj: "\<lbrakk> a \<in> Agent; b \<in> Agent; x \<in> Agent; y \<in> Agent \<rbrakk> \<Longrightarrow> (Kbd a b = Kbd x y) = (a = x \<and> b = y \<or> a = y \<and> b = x)"- apply(clarsimp simp: Kbd_def Agent_def agents_def expand_set_eq) + apply(clarsimp simp: Kbd_def Agent_def agents_def set_eq_iff) apply(rule iffI) apply(rename_tac a b x y) apply(safe)@@ -126,7 +126,7 @@ subsection{* Operations *} -types store = "varid \<times> tid \<Rightarrow> execmsg"+type_synonym store = "varid \<times> tid \<Rightarrow> execmsg" fun inv :: "execmsg \<Rightarrow> execmsg" where
data/isabelle/src/ESPLogic/ExplicitModel.thy view
@@ -34,9 +34,9 @@ RCompr notetype tid | RLKR execmsg -types explicit_trace = "rawevent list"-types execstep = "tid \<times> rolestep"-types threadpool = "tid \<rightharpoonup> (rolestep list \<times> rolestep list \<times> rolestep set)"+type_synonym explicit_trace = "rawevent list"+type_synonym execstep = "tid \<times> rolestep"+type_synonym threadpool = "tid \<rightharpoonup> (rolestep list \<times> rolestep list \<times> rolestep set)" fun knows :: "explicit_trace \<Rightarrow> execmsg set" where@@ -109,7 +109,7 @@ by (auto simp: longTermKeys_def) -types state = "explicit_trace \<times> threadpool \<times> store"+type_synonym state = "explicit_trace \<times> threadpool \<times> store" inductive_set reachable :: "proto \<Rightarrow> state set" @@ -208,7 +208,7 @@ lemma role_in_P: "done @ todo \<in> P" using thread_exists proof (induct arbitrary: i "done" todo skipped rule: reachable_induct)-qed (fastsimp split: if_splits)++qed (fastforce split: if_splits)+ end @@ -297,7 +297,7 @@ lemma RCompr_steps_conv: "RCompr ty i \<in> reveals t = (\<exists> l pt. (i, Note l ty pt) \<in> steps t)"-by (fastsimp intro: reveals_to_steps steps_to_reveals)+by (fastforce intro: reveals_to_steps steps_to_reveals) context reachable_thread begin@@ -330,7 +330,7 @@ using thread_exists proof(induct arbitrary: i "done" todo skipped rule: reachable_induct) case init- thus "?case" by fastsimp+ thus "?case" by fastforce qed( auto split: if_splits) @@ -348,7 +348,7 @@ using thread_exists using distinct proof(induct arbitrary: i "done" todo skipped rule: reachable_induct)- case init thus ?case by fastsimp+ case init thus ?case by fastforce next case (send t r s i "done" l pt todo skipped m i' done' todo' skipped') thus ?case@@ -357,8 +357,8 @@ then interpret thread: reachable_thread P t r s i "done" "Send l pt # todo" skipped' using send by unfold_locales auto- thus ?thesis - using send `i = i'` by fastsimp + show ?thesis + using send `i = i'` by fastforce qed auto next case (recv t r s i "done" l pt todo skipped m i' done' todo' skipped')@@ -368,8 +368,8 @@ then interpret thread: reachable_thread P t r s i "done" "Recv l pt # todo" skipped' using recv by unfold_locales auto- thus ?thesis - using recv `i = i'` by fastsimp + show ?thesis + using recv `i = i'` by fastforce qed auto next case (compr t r s i "done" l ty pt todo skipped m i' done' todo' skipped') @@ -382,8 +382,8 @@ interpret thread: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped' using compr `i = i'` by unfold_locales auto- thus ?thesis using compr `i = i'` `step = Note l ty pt` by (fastsimp dest: thread.skipped_in_done )- qed fastsimp+ show ?thesis using compr `i = i'` `step = Note l ty pt` by (fastforce dest: thread.skipped_in_done )+ qed fastforce qed auto next case(skip t r s i "done" l ty pt todo skipped i' done' todo' skipped')@@ -396,8 +396,8 @@ interpret thread: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped using skip `i = i'` by unfold_locales auto- thus ?thesis using skip `i = i'` `step = Note l ty pt` by fastsimp- qed fastsimp+ show ?thesis using skip `i = i'` `step = Note l ty pt` by fastforce+ qed fastforce qed auto qed auto @@ -406,7 +406,7 @@ using thread_exists proof(induct arbitrary: i "done" todo skipped rule rule: reachable_induct) case init- thus "?case" by fastsimp+ thus "?case" by fastforce qed ((unfold map_upd_Some_unfold)?, auto)+ lemma in_steps_send:@@ -414,7 +414,7 @@ using thread_exists proof(induct arbitrary: i "done" todo skipped rule rule: reachable_induct) case init- thus "?case" by fastsimp+ thus "?case" by fastforce qed ((unfold map_upd_Some_unfold)?, auto)+ lemmas send_steps_in_done [elim!] = iffD1[OF in_steps_send, rule_format]@@ -444,13 +444,13 @@ "step \<in> set todo \<Longrightarrow> step \<notin> skipped" using distinct using role_in_P-by(fastsimp dest: skipped_in_done)+by(fastforce dest: skipped_in_done) lemma skipped_notin_todoD: "step \<in> skipped \<Longrightarrow> step \<notin> set todo" using distinct using role_in_P-by(fastsimp dest: skipped_in_done)+by(fastforce dest: skipped_in_done) lemma notin_steps_notin_trace: "(i, step) \<notin> steps t \<Longrightarrow> (Step (i, step)) \<notin> set t"@@ -463,13 +463,13 @@ "step \<in> set done" proof(cases step) case (Send l pt)- thus ?thesis using inSteps by (fastsimp dest: in_steps_send[THEN iffD2])+ thus ?thesis using inSteps by (fastforce dest: in_steps_send[THEN iffD2]) next case (Recv l pt)- thus ?thesis using inSteps by (fastsimp dest: in_steps_recv[THEN iffD2])+ thus ?thesis using inSteps by (fastforce dest: in_steps_recv[THEN iffD2]) next case (Note l ty pt)- thus ?thesis using inSteps by (fastsimp simp add: in_steps_conv_done_skipped)+ thus ?thesis using inSteps by (fastforce simp add: in_steps_conv_done_skipped) qed @@ -483,7 +483,7 @@ lemma[dest]: "\<lbrakk> step \<in> set todo; step \<in> set done \<rbrakk> \<Longrightarrow> False"-by(fastsimp dest: todo_notin_doneD)+by(fastforce dest: todo_notin_doneD) lemma[dest]: "\<lbrakk> step \<in> set todo; step \<in> skipped \<rbrakk> \<Longrightarrow> False"@@ -509,7 +509,7 @@ proof(induct arbitrary: i "done" todo skipped rule: reachable_induct) case (init r s i "done" todo) thus ?case- by fastsimp+ by fastforce next case (send t r s i "done" l msg todo skipped m i' done' todo' skipped') thus ?case using send @@ -518,9 +518,9 @@ interpret this_thread: reachable_thread P t r s i' "done" "Send l msg # todo'" skipped' using send `i = i'` by unfold_locales auto- thus ?thesis using send `i = i'`- by fastsimp- qed fastsimp+ show?thesis using send `i = i'`+ by fastforce+ qed fastforce next case (recv t r s i "done" l msg todo skipped m i' done' todo' skipped') from recv show ?case @@ -529,9 +529,9 @@ interpret this_thread: reachable_thread P t r s i' "done" "Recv l msg # todo'" skipped' using recv `i = i'` by unfold_locales auto- thus ?thesis using recv `i = i'`- by fastsimp- qed fastsimp+ show ?thesis using recv `i = i'`+ by fastforce+ qed fastforce next case (compr t r s i "done" l ty msg todo skipped m i' done' todo' skipped') from compr show ?case @@ -540,9 +540,9 @@ interpret this_thread: reachable_thread P t r s i' "done" "Note l ty msg # todo'" skipped' using compr `i = i'` by unfold_locales auto- thus ?thesis using compr `i = i'`- by fastsimp- qed fastsimp+ show ?thesis using compr `i = i'`+ by fastforce+ qed fastforce next case (skip t r s i "done" l ty msg todo skipped i' done' todo' skipped') from skip show ?case @@ -551,9 +551,9 @@ then interpret this_thread: reachable_thread P t r s i "done" "Note l ty msg # todo" skipped using skip `i = i'` by unfold_locales auto- thus ?thesis using skip `i = i'`- by fastsimp- qed fastsimp+ show ?thesis using skip `i = i'`+ by fastforce+ qed fastforce qed auto lemma listOrd_recv_role_imp_listOrd_trace:@@ -695,21 +695,21 @@ reachable_thread P t r s i "done" "Recv l msg # todo" skipped by unfold_locales auto show ?case using `distinct' t` this_thread.distinct- by(fastsimp dest: this_thread.in_steps_in_done)+ by(fastforce dest: this_thread.in_steps_in_done) next case (send t r s i "done" l msg todo skipped m) then interpret this_thread: reachable_thread P t r s i "done" "Send l msg # todo" skipped by unfold_locales auto show ?case using `distinct' t` and this_thread.distinct- by(fastsimp dest: this_thread.in_steps_in_done)+ by(fastforce dest: this_thread.in_steps_in_done) next case (compr t r s i "done" l ty msg todo skipped m) then interpret this_thread: reachable_thread P t r s i "done" "Note l ty msg # todo" skipped by unfold_locales auto show ?case using `distinct' t` and this_thread.distinct- by(fastsimp dest: this_thread.in_steps_in_done)+ by(fastforce dest: this_thread.in_steps_in_done) next case (skip t r s i "done" l ty msg todo skipped) then interpret this_thread: @@ -827,7 +827,7 @@ "\<lbrakk>predOrd t (St a) (LKR d); \<lbrakk> a \<in> steps t; RLKR d \<in> reveals t \<rbrakk> \<Longrightarrow> R \<rbrakk> \<Longrightarrow> R" "\<lbrakk>predOrd t (Ln x) (LKR d); \<lbrakk> x \<in> knows t; RLKR d \<in> reveals t \<rbrakk> \<Longrightarrow> R \<rbrakk> \<Longrightarrow> R" "\<lbrakk>predOrd t (LKR c) (LKR d); \<lbrakk> RLKR c \<in> reveals t; RLKR d \<in> reveals t \<rbrakk> \<Longrightarrow> R \<rbrakk> \<Longrightarrow> R"- by(fastsimp intro: event_predOrdI compr_predOrdI)++ by(fastforce intro: event_predOrdI compr_predOrdI)+ lemma predOrd_LKR_agent1:@@ -1047,7 +1047,7 @@ next case decr thus ?case by(auto dest: pairParts_idemD) next- case tuple thus ?case by fastsimp+ case tuple thus ?case by fastforce next case lkr thus ?case by(auto simp: longTermKeys_def) next@@ -1070,37 +1070,37 @@ then interpret s1: reachable_state P t r s by unfold_locales from hash show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (encr t r s msg key) then interpret s1: reachable_state P t r s by unfold_locales from encr show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (tuple t r s msg1 msg2) then interpret s1: reachable_state P t r s by unfold_locales from tuple show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (decr t r s msg key) then interpret s1: reachable_state P t r s by unfold_locales from decr show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (send t r s i "done" l msg todo msg) then interpret s1: reachable_state P t r s by unfold_locales from send show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (recv t r s i "done" l msg todo) then interpret s1: reachable_state P t r s by unfold_locales from recv show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (init r s) thus ?case by simp next@@ -1108,25 +1108,25 @@ then interpret s1: reachable_state P t r s by unfold_locales from lkr show ?case- by (fastsimp dest: s1.rev_knows_pairParts_closedD)+ by (fastforce dest: s1.rev_knows_pairParts_closedD) next case (skip t r s i "done" l ty pt todo) then interpret s1: reachable_state P t r s by unfold_locales from skip show ?case- by(fastsimp dest: s1.rev_knows_pairParts_closedD)+ by(fastforce dest: s1.rev_knows_pairParts_closedD) next case (compr t r s i "done" l ty pt todo skipped m) then interpret s1: reachable_state P t r s by unfold_locales from compr show ?case- by(fastsimp dest: s1.rev_knows_pairParts_closedD)+ by(fastforce dest: s1.rev_knows_pairParts_closedD) qed lemma Ln_before_inp: "(i, Recv l pt) \<in> steps t \<Longrightarrow> \<exists> m. Some m = inst s i pt \<and> Ln m \<prec> St (i, Recv l pt)"- by (induct arbitrary: i l pt rule: reachable_induct) fastsimp++ by (induct arbitrary: i l pt rule: reachable_induct) fastforce+ lemma Ln_before_inpE: "\<lbrakk> (i, Recv l pt) \<in> steps t;@@ -1144,11 +1144,11 @@ lemma split_before: "Ln (Tup m m') \<prec> y \<Longrightarrow> Ln m \<prec> y \<and> Ln m' \<prec> y"- by (fastsimp intro: pairParts_before)+ by (fastforce intro: pairParts_before) lemma split_knows: "Tup m m' \<in> knows t \<Longrightarrow> m \<in> knows t \<and> m' \<in> knows t"- by (fastsimp intro: knows_pairParts_closedD)+ by (fastforce intro: knows_pairParts_closedD) end subsection{* Case Distinction on Learning Messages *}@@ -1207,7 +1207,7 @@ hence "?case" proof(cases "m' = Enc m k") case True thus ?thesis- using `?here` Enc by fastsimp+ using `?here` Enc by fastforce next case False thus ?thesis using `?here` Enc@@ -1217,7 +1217,7 @@ moreover { assume "?nested" hence "?case" using Enc- by (fastsimp dest!: Enc(2))+ by (fastforce dest!: Enc(2)) } ultimately show ?case by fast qed auto@@ -1257,17 +1257,17 @@ (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys") moreover { assume "?ik0" hence "?thesis" by blast } moreover- { assume "?hash" hence "?thesis" by fastsimp } moreover- { assume "?enc" hence "?thesis" by fastsimp } moreover- { assume "?tup" hence "?thesis" by fastsimp } moreover+ { assume "?hash" hence "?thesis" by fastforce } moreover+ { assume "?enc" hence "?thesis" by fastforce } moreover+ { assume "?tup" hence "?thesis" by fastforce } moreover { assume "?chain t r s" hence "?chain (t@t') r s" - by (fastsimp intro!: decrChain_append)+ by (fastforce intro!: decrChain_append) hence "?thesis" by blast } moreover { assume "?note t r s" hence "?note (t@t') r s" - by (fastsimp intro!: decrChain_append)+ by (fastforce intro!: decrChain_append) hence "?thesis" by blast } moreover { assume "?keys" hence "?thesis" by auto }@@ -1284,14 +1284,14 @@ let ?t' = "t @ [Learns {Hash m}]" note IH = hash(2) have "m' \<in> knows t \<or> m' = Hash m" (is "?old \<or> ?new")- using hash by fastsimp+ using hash by fastforce moreover { assume "?new" hence ?case - using `m \<in> knows t` by fastsimp + using `m \<in> knows t` by fastforce } moreover { assume "?old" - hence ?case by (fastsimp intro!: IH cases_appendI_trace)+ hence ?case by (fastforce intro!: IH cases_appendI_trace) } ultimately show ?case by fast next@@ -1299,10 +1299,10 @@ let ?t' = "t @ [Learns {Enc m k}]" note IH = encr(2) have "m' \<in> knows t \<or> m' = Enc m k" (is "?old \<or> ?new")- using encr by fastsimp+ using encr by fastforce moreover { assume "?new" hence ?case - using `m \<in> knows t` and `k \<in> knows t` by fastsimp + using `m \<in> knows t` and `k \<in> knows t` by fastforce } moreover { assume "?old" @@ -1314,10 +1314,10 @@ let ?t' = "t @ [Learns {Tup x y}]" note IH = tuple(2) have "m' \<in> knows t \<or> m' = Tup x y" (is "?old \<or> ?new")- using tuple by fastsimp+ using tuple by fastforce moreover { assume "?new" hence ?case - using `x \<in> knows t` and `y \<in> knows t` by fastsimp + using `x \<in> knows t` and `y \<in> knows t` by fastforce } moreover { assume "?old" @@ -1331,30 +1331,28 @@ by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover- { assume "?hash" hence "?case" by fastsimp } moreover- { assume "?enc" hence "?case" by fastsimp } moreover- { assume "?keys" hence "?case" by fastsimp } moreover- { assume "?tup" hence "?case" by fastsimp } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover { let ?t' = "t@[Step (i, Recv l pt)]" and ?r' = "r(i \<mapsto> (done @ [Recv l pt], todo, skipped))" assume "?chain t r s" then obtain i' done' todo' l' pt' skipped' m- where thread': "r i' = Some (done', todo', skipped')"- and send: "Send l' pt' \<in> set done'"+ where thread': "r i' = Some (done', todo', skipped')"+ and send: "Send l' pt' \<in> set done'" and msg: "Some m = inst s i' pt'"- and chain:"decrChain [] t {St (i', Send l' pt')} m m'"- by auto+ and chain:"decrChain [] t {St (i', Send l' pt')} m m'"+ by auto then interpret th1: reachable_thread P t r s i' done' todo' skipped'- using recv by unfold_locales auto- moreover- obtain done'' todo'' skipped''- where "Send l' pt' \<in> set done''"- and "?r' i' = Some (done'', todo'', skipped'')"- using `r i = Some (done, Recv l pt # todo, skipped)` thread' send- by (cases "i = i'") (fastsimp+)- ultimately- have "?chain ?t' ?r' s"- using chain msg+ using recv by unfold_locales auto+ obtain done'' todo'' skipped''+ where "Send l' pt' \<in> set done''"+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Recv l pt # todo, skipped)` thread' send+ by (cases "i = i'") (fastforce+)+ hence "?chain ?t' ?r' s"+ using chain msg by (fast intro!: decrChain_append) hence "?case" by auto } moreover@@ -1362,27 +1360,25 @@ and ?r' = "r(i \<mapsto> (done @ [Recv l pt], todo, skipped))" assume "?note t r s" then obtain i' done' todo' skipped' l' ty' pt' m- where thread': "r i' = Some (done', todo', skipped')"- and inDone: "Note l' ty' pt' \<in> set done'"+ where thread': "r i' = Some (done', todo', skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'" and notSkipped: "Note l' ty' pt' \<notin> skipped'" and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'" by auto then interpret th1: reachable_thread P t r s i' done' todo' skipped'- using recv by unfold_locales auto- moreover+ using recv by unfold_locales auto obtain done'' todo'' skipped''- where "Note l' ty' pt' \<in> set done''"+ where "Note l' ty' pt' \<in> set done''" and "Note l' ty' pt' \<notin> skipped'' "- and "?r' i' = Some (done'', todo'', skipped'')"- using `r i = Some (done, Recv l pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (fastsimp+)- ultimately- have "?note ?t' ?r' s" using msg chain notSkipped inDone+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Recv l pt # todo, skipped)` thread' inDone notSkipped+ by (cases "i = i'") (fastforce+)+ hence "?note ?t' ?r' s" using msg chain notSkipped inDone by (fast intro!: decrChain_append) hence "?case" by auto }- ultimately show ?case by fastsimp+ ultimately show ?case by fastforce next case (send t r s i "done" l pt todo skipped m) then interpret th1: @@ -1392,23 +1388,23 @@ let ?t' = "(t @ [Step (i, Send l pt)]) @ [Learns (pairParts m - knows t)]" have "m' \<in> knows t \<or> m' \<in> pairParts m \<and> m' \<notin> knows t \<and> Some m = inst s i pt" (is "?old \<or> ?new")- using send by fastsimp+ using send by fastforce moreover { assume "?new" hence "decrChain [] ?t' {St (i, Send l pt)} m m'"- by (fastsimp intro!: decrChain_unpair)+ by (fastforce intro!: decrChain_unpair) moreover have "?r' i = Some (done @ [Send l pt], todo, skipped)" using th1.thread_exists by auto ultimately have ?case using `Some m = inst s i pt`- apply-+ apply- apply(rule disjI2) apply(rule disjI2) apply(rule disjI2) apply(rule disjI2) apply(rule disjI1)- apply(fastsimp)+ apply(fastforce) done } moreover@@ -1418,10 +1414,10 @@ using send by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover- { assume "?hash" hence "?case" by fastsimp } moreover- { assume "?enc" hence "?case" by fastsimp } moreover- { assume "?keys" hence "?case" by fastsimp } moreover- { assume "?tup" hence "?case" by fastsimp } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover { assume "?chain t r s" then obtain i' done' todo' l' pt' skipped' m where thread': "r i' = Some (done', todo',skipped')"@@ -1433,7 +1429,7 @@ where "Send l' pt' \<in> set done''" and "(r(i \<mapsto> (done @ [Send l pt], todo, skipped))) i' = Some (done'', todo'',skipped'')" using `r i = Some (done, Send l pt # todo, skipped)` thread' send- by (cases "i = i'") (fastsimp+)+ by (cases "i = i'") (fastforce+) hence "?chain ?t' ?r' s" using chain msg by (fast intro!: decrChain_append)@@ -1452,7 +1448,7 @@ and "Note l' ty' pt' \<notin> skipped'' " and "?r' i' = Some (done'', todo'', skipped'')" using `r i = Some (done, Send l pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (fastsimp+)+ by (cases "i = i'") (fastforce+) hence "?note ?t' ?r' s" using chain notSkipped inDone msg by(fast intro!: decrChain_append) hence "?case" by auto@@ -1468,7 +1464,7 @@ note IH = decr(2) have "m' \<in> knows t \<or> m' \<in> pairParts m \<and> m' \<notin> knows t" (is "?old \<or> ?new")- using decr by fastsimp+ using decr by fastforce moreover { assume "?new" hence "m' \<in> pairParts m" and "m' \<notin> knows t" by auto@@ -1499,9 +1495,9 @@ moreover hence "decrChain [] ?t' {St (i', Send l' pt')} ms m'" using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`- by (fastsimp intro!: decrChain_decrypt)+ by (fastforce intro!: decrChain_decrypt) ultimately- have "?decchain ?t' m'" by fastsimp+ have "?decchain ?t' m'" by fastforce hence "?case" by blast } moreover@@ -1516,9 +1512,9 @@ moreover hence "decrChain [] ?t' {St (i', Note l' ty' pt')} ms m'" using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`- by (fastsimp intro!: decrChain_decrypt)+ by (fastforce intro!: decrChain_decrypt) ultimately- have "?notechain ?t' m'" by fastsimp+ have "?notechain ?t' m'" by fastforce hence "?case" by blast } ultimately have ?case by fast@@ -1536,7 +1532,7 @@ note IH = lkr(2) have "m' \<in> knows t \<or> m' \<in> longTermKeys a \<and> m' \<notin> knows t" (is "?old \<or> ?new")- using lkr by fastsimp+ using lkr by fastforce moreover { assume "?old"@@ -1552,16 +1548,16 @@ case (skip t r s i "done" l ty pt todo skipped) then interpret this_thread: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped by unfold_locales let ?r' = "r(i \<mapsto> (done @ [Note l ty pt], todo, insert (Note l ty pt) skipped))"- have "m' \<in> knows t" using skip by fastsimp+ have "m' \<in> knows t" using skip by fastforce hence "?cases m' t r s" (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys") using skip by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover- { assume "?hash" hence "?case" by fastsimp } moreover- { assume "?enc" hence "?case" by fastsimp } moreover- { assume "?keys" hence "?case" by fastsimp } moreover- { assume "?tup" hence "?case" by fastsimp } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover { assume "?chain t r s" then obtain i' done' todo' l' pt' skipped' m where thread': "r i' = Some (done', todo',skipped')"@@ -1573,7 +1569,7 @@ where "Send l' pt' \<in> set done''" and "?r' i' = Some (done'', todo'',skipped'')" using skip(3) thread' send- by (cases "i = i'") (fastsimp+)+ by (cases "i = i'") (fastforce+) hence "?chain t ?r' s" using chain msg by fast hence "?case" by auto@@ -1598,9 +1594,9 @@ by fast hence "?case" by auto } moreover- { assume "?keys" hence "?case" by fastsimp }+ { assume "?keys" hence "?case" by fastforce } ultimately - show "?case" by fastsimp+ show "?case" by fastforce next case(compr t r s i "done" l ty pt todo skipped m m') then interpret th1: @@ -1610,7 +1606,7 @@ let ?t' = "(t @ [Step (i, Note l ty pt)]) @ [Learns (pairParts m - knows t)]" have "m' \<in> knows t \<or> m' \<in> pairParts m \<and> m' \<notin> knows t \<and> Some m = inst s i pt" (is "?old \<or> ?new")- using compr by fastsimp+ using compr by fastforce moreover { assume "?new" (*@@ -1618,7 +1614,7 @@ by auto *) hence "decrChain [] ?t' {St (i, Note l ty pt)} m m'" - by (fastsimp intro!: decrChain_unpair)+ by (fastforce intro!: decrChain_unpair) moreover have "?r' i = Some (done @ [Note l ty pt], todo, skipped)" using th1.thread_exists by auto@@ -1626,7 +1622,7 @@ have "Note l ty pt \<in> set (Note l ty pt # todo)" using th1.thread_exists by auto hence "Note l ty pt \<notin> skipped" - by (fastsimp dest: th1.todo_notin_skippedD)+ by (fastforce dest: th1.todo_notin_skippedD) ultimately have ?case using `Some m = inst s i pt` apply-@@ -1645,10 +1641,10 @@ using compr by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover- { assume "?hash" hence "?case" by fastsimp } moreover- { assume "?enc" hence "?case" by fastsimp } moreover- { assume "?keys" hence "?case" by fastsimp } moreover- { assume "?tup" hence "?case" by fastsimp } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover { assume "?chain t r s" then obtain i' done' todo' l' pt' skipped' m where thread': "r i' = Some (done', todo',skipped')"@@ -1660,7 +1656,7 @@ where "Send l' pt' \<in> set done''" and "(r(i \<mapsto> (done @ [Note l ty pt], todo, skipped))) i' = Some (done'', todo'',skipped'')" using compr(3) thread' send- by (cases "i = i'") (fastsimp+)+ by (cases "i = i'") (fastforce+) hence "?chain ?t' ?r' s" using chain msg by(fast intro!: decrChain_append) hence "?case" by auto@@ -1678,7 +1674,7 @@ and "Note l' ty' pt' \<notin> skipped'' " and "?r' i' = Some (done'', todo'', skipped'')" using `r i = Some (done, Note l ty pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (fastsimp+)+ by (cases "i = i'") (fastforce+) hence "?note ?t' ?r' s" using chain notSkipped inDone msg by(fast intro!: decrChain_append)
data/isabelle/src/ESPLogic/HOL_ext.thy view
@@ -17,7 +17,7 @@ lemma dom_upd [simp]: "dom (\<lambda> a. if a = x then Some y else m a) = insert x (dom m)"- by(fastsimp simp: dom_if)+ by(fastforce simp: dom_if) lemma map_leD: "\<lbrakk> m \<subseteq>\<^sub>m m'; m x = Some y \<rbrakk> \<Longrightarrow> m' x = Some y" by(force simp: map_le_def)@@ -112,7 +112,7 @@ *) fun forall_permute ctxt p ct = let- val cert = Thm.cterm_of (ProofContext.theory_of ctxt);+ val cert = Thm.cterm_of (Proof_Context.theory_of ctxt); fun mk_cv (_, ty) n = cert (Free (n, ty)); val string_of_perm = commas o map string_of_int; fun err msg = raise CTERM@@ -213,7 +213,7 @@ *) fun track_HOL_term ctxt x_t = let- val thy = ProofContext.theory_of ctxt;+ val thy = Proof_Context.theory_of ctxt; val cert = Thm.cterm_of thy; val x_ty = Term.fastype_of x_t; @@ -226,7 +226,7 @@ val Qx_ct = cert (HOLogic.mk_Trueprop (Q_t $ x_t)); val eq_x_ct = cert (Abs ("y", x_ty, - Const (@{const_name "op ="}, x_ty --> x_ty --> HOLogic.boolT)+ Const (@{const_name "HOL.eq"}, x_ty --> x_ty --> HOLogic.boolT) $ x_t $ Bound 0)); fun remove_tracking th' =
data/isabelle/src/ESPLogic/Hints.thy view
@@ -13,10 +13,10 @@ theory Hints imports Main-uses- espl_utils begin +ML_file "espl_utils.ML"+ section{* A Theory of Hints for Marking Intermediate Results *} @@ -90,3 +90,4 @@ *} end+
data/isabelle/src/ESPLogic/InferenceRules.thy view
@@ -94,12 +94,12 @@ proof - interpret reachable_thread P t r s i "done" "step#todo" skipped using facts by unfold_locales auto- hence "step \<in> set (step # todo)" by auto- hence "step \<notin> set done" using facts by (fastsimp dest!: todo_notin_doneD)+ have "step \<in> set (step # todo)" by auto+ hence "step \<notin> set done" using facts by (fastforce dest!: todo_notin_doneD) hence "(takeWhile (\<lambda> x. x \<noteq> step) done) = done" by auto hence "(takeWhile (\<lambda> x. x \<noteq> step) (done @ (step # todo))) = done" by auto moreover- have "R = (done @ (step # todo))" using facts by (fastsimp dest: roleMap_SomeD)+ have "R = (done @ (step # todo))" using facts by (fastforce dest: roleMap_SomeD) ultimately show ?thesis by auto qed @@ -138,10 +138,10 @@ shows "(st \<in> set done \<and> st \<noteq> (Note l ty pt)) \<or> (st = step)" proof -- have "(st \<in> set R \<and> st \<noteq> (Note l ty pt)) \<or> (st = step)" using filtered by (fastsimp dest: filtered_role_conv)+ have "(st \<in> set R \<and> st \<noteq> (Note l ty pt)) \<or> (st = step)" using filtered by (fastforce dest: filtered_role_conv) moreover- have "(takeWhile (\<lambda> x. x \<noteq> step) R) = done" using isThread by (fastsimp dest: take_while_is_done)- ultimately show ?thesis using isThread and filtered by fastsimp+ have "(takeWhile (\<lambda> x. x \<noteq> step) R) = done" using isThread by (fastforce dest: take_while_is_done)+ ultimately show ?thesis using isThread and filtered by fastforce qed lemma filtered_in_done:@@ -153,7 +153,7 @@ interpret this_thread: reachable_thread P t r s i "done" todo skipped using role_exists by unfold_locales auto- hence "step \<in> set done"+ have "step \<in> set done" using step by (auto dest: this_thread.in_steps_in_done) moreover then obtain prefix suffix @@ -167,7 +167,7 @@ assume "st \<noteq> step \<and> takeWhile (\<lambda>x. x \<noteq> step) R = prefix" hence "st \<in> set prefix" using inFiltered by auto- hence ?thesis using done_split by fastsimp+ hence ?thesis using done_split by fastforce } moreover { assume "st = step \<and> step \<in> set done"@@ -236,7 +236,7 @@ \<lbrakk> nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st' \<rbrakk> \<Longrightarrow> St (i, st) \<prec> St (i, st')" shows "prefixClose s t R step i"-using prems by (auto simp: prefixClose_def)+using assms by (auto simp: prefixClose_def) lemma prefixCloseI: assumes step: "(i, step) \<in> steps t"@@ -276,13 +276,13 @@ apply - apply(rule conjI, assumption) apply(case_tac "st = step")- apply(fastsimp dest: this_thread.in_steps_conv_done_skipped[THEN iffD1])- apply(fastsimp dest!: this_thread.note_in_skipped note_filtered_revRole)+ apply(fastforce dest: this_thread.in_steps_conv_done_skipped[THEN iffD1])+ apply(fastforce dest!: this_thread.note_in_skipped note_filtered_revRole) apply(rule conjI, assumption) apply(case_tac "st' = step")- apply(fastsimp dest: this_thread.in_steps_conv_done_skipped[THEN iffD1])- by(fastsimp dest!: this_thread.note_in_skipped note_filtered_revRole)+ apply(fastforce dest: this_thread.in_steps_conv_done_skipped[THEN iffD1])+ by(fastforce dest!: this_thread.note_in_skipped note_filtered_revRole) hence steps: "(i, st) \<in> steps t" "(i, st') \<in> steps t" by(auto dest: this_thread.in_steps_conv_done_skipped[THEN iffD1]) { assume "recvStep st" then@@ -294,12 +294,12 @@ have "listOrd R st st'" using nextRel and R_split and done_split- by(fastsimp dest: nextRel_imp_listOrd listOrd_rev[THEN iffD1] listOrd_filter)+ by(fastforce dest: nextRel_imp_listOrd listOrd_rev[THEN iffD1] listOrd_filter) hence "St (i, st) \<prec> St (i, st')" using role_exists steps R_split apply - apply(drule this_thread.in_steps_conv_done_skipped[THEN iffD1])- by(fastsimp dest!: this_thread.roleOrd_notSkipped_imp_listOrd_trace dest:listOrd_imp_predOrd)++ by(fastforce dest!: this_thread.roleOrd_notSkipped_imp_listOrd_trace dest:listOrd_imp_predOrd)+ note input and this } ultimately show ?thesis@@ -312,7 +312,7 @@ "\<lbrakk> (i, step) \<in> steps t; roleMap r i = Some R \<rbrakk> \<Longrightarrow> prefixClose s t R step i \<and> (recvStep step \<longrightarrow> (\<exists> m. Some m = inst s i (stepPat step) \<and> Ln m \<prec> St (i, step)))"- by (cases step) (fastsimp intro!: prefixCloseI Ln_before_inp)++ by (cases step) (fastforce intro!: prefixCloseI Ln_before_inp)+ text{* Used for prefix closing assumptions corresponding to a case of@@ -343,14 +343,14 @@ proof obtain l pt where recv_eq: "(Recv l pt) = (last (step # done))"- using recv by (fastsimp dest!: recvStepD)+ using recv by (fastforce dest!: recvStepD) hence "Recv l pt \<in> set (step # done)" by auto thus ?thesis using thread_exists recv_eq- by(fastsimp dest!: this_thread.in_steps_recv[THEN iffD1])+ by(fastforce dest!: this_thread.in_steps_recv[THEN iffD1]) qed hence "?inp_last"- by (cases "last (step # done)") (fastsimp dest!: Ln_before_inp)++ by (cases "last (step # done)") (fastforce dest!: Ln_before_inp)+ } moreover { @@ -361,7 +361,7 @@ hence skipped: "st \<notin> skipped \<and> st' \<notin> skipped" proof(cases "st = step \<and> st' \<in> set done \<and> \<not> noteStep st'") case True- thus "?thesis" using listOrd not_skipped by (fastsimp dest: this_thread.note_in_skipped)+ thus "?thesis" using listOrd not_skipped by (fastforce dest: this_thread.note_in_skipped) next case False note falseAsms = this@@ -382,7 +382,7 @@ assumption) apply(drule_tac ?Q = "listOrd done st st'" and ?P = "st = step \<and> st' \<in> set done" in disjI1) apply(drule listOrd.simps(2)[THEN iffD2])- by(fastsimp dest: listOrd_imp_predOrd this_thread.listOrd_done_imp_listOrd_trace)+ by(fastforce dest: listOrd_imp_predOrd this_thread.listOrd_done_imp_listOrd_trace) next case False note assms = this@@ -397,7 +397,7 @@ apply(drule listOrd_filter) apply(drule_tac ?Q = "listOrd done st st'" and ?P = "st = step \<and> st' \<in> set done" in disjI2) apply(drule listOrd.simps(2)[THEN iffD2])- by (fastsimp dest: listOrd_imp_predOrd this_thread.listOrd_done_imp_listOrd_trace)+ by (fastforce dest: listOrd_imp_predOrd this_thread.listOrd_done_imp_listOrd_trace) qed qed hence recv: "recvStep st \<Longrightarrow> @@ -432,22 +432,22 @@ case (send t r s i "done" l pt todo m y) then interpret this_state: reachable_state P t r s by unfold_locales show ?case using send- by(fastsimp dest: this_state.knows_IK0)+ by(fastforce dest: this_state.knows_IK0) next case (decr t r s m k y) then interpret this_state: reachable_state P t r s by unfold_locales show ?case using decr- by(fastsimp dest: this_state.knows_IK0)+ by(fastforce dest: this_state.knows_IK0) next case (lkr t r s a) then interpret this_state: reachable_state P t r s by unfold_locales show ?case using lkr- by(fastsimp dest: this_state.knows_IK0)+ by(fastforce dest: this_state.knows_IK0) next case (compr t r s "done" l ty pt todo skipped m y) then interpret this_state: reachable_state P t r s by unfold_locales show ?case using compr- by(fastsimp dest: this_state.knows_IK0)+ by(fastforce dest: this_state.knows_IK0) qed auto lemmas nothing_before_IK0_iffs [iff] = in_IK0_simps[THEN nothing_before_IK0]@@ -485,11 +485,11 @@ and conc_inj: "\<And> i1 i2 j. \<lbrakk> conc i1 j \<and> conc i2 j \<rbrakk> \<Longrightarrow> i1 = i2" shows "let prems = prem; concs = conc- in \<exists>f. inj_on f prems \<and> (\<forall>i. prems i \<longrightarrow> concs i (f i))"+ in \<exists>f. inj_on f (Collect prems) \<and> (\<forall>i. prems i \<longrightarrow> concs i (f i))" proof - let ?f = "\<lambda> i. SOME j. conc i j"- have "inj_on ?f prem"- apply(auto simp: inj_on_def mem_def dest!: niagree)+ have "inj_on ?f (Collect prem)"+ apply(auto simp: inj_on_def dest!: niagree) apply(rule_tac j="(SOME j. conc x j)" in conc_inj[OF conjI]) apply(rule someI, simp+)+ done
data/isabelle/src/ESPLogic/Protocol.thy view
@@ -21,7 +21,7 @@ subsubsection{* Patterns *} -types id = string+type_synonym id = string datatype varid = AVar id | MVar id @@ -108,7 +108,7 @@ They are currently defaulted to strings, but could be anything. *} -types lbl = string+type_synonym lbl = string datatype notetype = RandGen | State | SessKey @@ -161,7 +161,7 @@ qed auto -types "role" = "rolestep list"+type_synonym "role" = "rolestep list" fun recv_before :: "id set \<Rightarrow> role \<Rightarrow> bool" where@@ -181,7 +181,7 @@ subsubsection{* Protocols *} -types proto = "role set"+type_synonym proto = "role set" locale wf_proto = fixes P :: proto@@ -242,7 +242,7 @@ moreover have "distinct R" and "recv_before {} R" by auto ultimately obtain lbl' pt' where "Recv lbl' pt' \<in> set ys" and "v \<in> FMV pt'"- by (fastsimp dest!: recv_before_sent_distinct_Send_FV intro!: FV)+ by (fastforce dest!: recv_before_sent_distinct_Send_FV intro!: FV) hence "?received lbl' pt'" using split by auto thus ?thesis by blast qed@@ -262,7 +262,7 @@ moreover have "distinct R" and "recv_before {} R" by auto ultimately obtain lbl' pt' where "Recv lbl' pt' \<in> set ys" and "v \<in> FMV pt'"- by (fastsimp dest!: recv_before_note_distinct_Note_FV intro!: FV)+ by (fastforce dest!: recv_before_note_distinct_Note_FV intro!: FV) hence "?received lbl' pt'" using split by auto thus ?thesis by blast qed@@ -291,7 +291,7 @@ lemma aVars_singleton[iff]: "AVar a \<notin> aVars []"-by(fastsimp simp add: aVars_def)+by(fastforce simp add: aVars_def) lemma aVars_Nil [iff]: "aVars [] = {}" by (auto simp: aVars_def)@@ -301,7 +301,7 @@ lemma aVars_FAV_conv: "(AVar a \<in> aVars R) = (\<exists> s \<in> set R. \<exists> pt. (stepPat s = pt \<and> a \<in> FAV pt))"-by (induct R rule: foldr.induct) ( fastsimp simp add: aVars_def)++by (induct R) ( fastforce simp add: aVars_def)+ definition lastComStep :: "role \<rightharpoonup> rolestep"@@ -334,7 +334,7 @@ s )" proof (cases "[s\<leftarrow>xs . \<not> noteStep s]")-qed (fastsimp simp add: lastComStep_def)++qed (fastforce simp add: lastComStep_def)+ lemma firstComStep_Nil [iff]: "firstComStep [] = None" by (auto simp: firstComStep_def)@@ -346,7 +346,7 @@ Some x )" proof (cases "[s\<leftarrow>xs . \<not> noteStep s]")-qed (fastsimp simp add: firstComStep_def)+ +qed (fastforce simp add: firstComStep_def)+
data/isabelle/src/ESPLogic/Syntax.thy view
@@ -62,7 +62,7 @@ translations "<|x, y, z|>" == "<|x, <|y, z|> |>"- "<|x, y|>" == "PTup x y"+ "<|x, y|>" == "CONST PTup x y" subsubsection{* Execution Messages *}
data/isabelle/src/ESPLogic/Unify.thy view
@@ -19,7 +19,9 @@ espl_methods.ML. With a uses clause it would be loaded twice, which may result in strange effects. *)- Automation + Automation+keywords+ "note_prefix_closed" "note_unified" "note_cyclic" :: prf_decl begin section{* Explicit unification of sets of equality theorems *}@@ -137,14 +139,14 @@ in (prod_ord bool_ord (prod_ord bool_ord - (prod_ord bool_ord TermOrd.term_ord)))+ (prod_ord bool_ord Term_Ord.term_ord))) (proj lhs, proj rhs) end fun old_unify_term_ord (arg as (lhs,rhs)) = if (is_variable_store_lookup lhs) then if (is_variable_store_lookup rhs) then- TermOrd.term_ord arg+ Term_Ord.term_ord arg else LESS else@@ -153,38 +155,21 @@ else if (is_roleMap lhs) then if (is_roleMap rhs) then- TermOrd.term_ord arg+ Term_Ord.term_ord arg else LESS else if (is_roleMap rhs) then GREATER else- TermOrd.term_ord arg;+ Term_Ord.term_ord arg; *} -(*-context reachable_state begin- ML{* -fun both t = (unify_term_ord t, old_unify_term_ord t);--both (@{term "s (MV a b)"}, @{term "LN x i"});-both (@{term "s (MV a b)"}, @{term "s (MV c d)"});-both (swap (@{term "s (MV a b)"}, @{term "s (AV c d)"}));-both (@{term "roleMap r i"}, @{term "Some R"});-both (swap (@{term "roleMap r i"}, @{term "Some R"}));- --*}-*)--ML{*- structure UnifyDest = Named_Thms- (val name ="unify_dest"+ (val name = @{binding "unify_dest"} val description = "Destruction rules to be used in note_unified") *}@@ -218,7 +203,7 @@ fun unify do_occurs_check ctxt ths = let (* TODO: Remove hack by using Named_Thms data functor. *)- val thm_by_name = ProofContext.get_thm ctxt;+ val thm_by_name = Proof_Context.get_thm ctxt; val ss = simpset_of ctxt delsimps map thm_by_name ["tid_eq_commute", "reorient_store_eq_store"]; @@ -252,12 +237,12 @@ (case remove_Trueprop (Thm.concl_of th) of (@{const True}) => solve1 (done, todo) | (@{const False}) => [th]- | (@{const "op &"} $ _ $ _) =>+ | (@{const "HOL.conj"} $ _ $ _) => solve1 ( done , (th RS @{thm conjunct1}) :: (th RS @{thm conjunct2}) :: todo )- | (Const (@{const_name "op ="},_) $ _ $ _) => + | (Const (@{const_name "HOL.eq"},_) $ _ $ _) => (case reorient_HOL_eq unify_term_ord th of NONE => solve1 (done, todo) | SOME th' =>@@ -306,7 +291,7 @@ fun modify_bound_thms ctxt b = let- val ths = ProofContext.get_thms ctxt (ProofContext.full_name ctxt b);+ val ths = Proof_Context.get_thms ctxt (Proof_Context.full_name ctxt b); in ((b,[]), [(f ctxt ths,[])]) end;@@ -315,338 +300,41 @@ state |> map_context_result (fn ctxt => ctxt |>- (ProofContext.note_thmss "" + (Proof_Context.note_thmss "" (map (modify_bound_thms ctxt) bindings)) ) |> (fn (named_thss, state') => state'- |> Proof.put_facts (SOME (maps snd named_thss))+ |> Proof.set_facts (maps snd named_thss) ) in- modify_and_renote o Proof.note_thmss args+ modify_and_renote o Proof.note_thmss_cmd args end- *} ML{* local- structure K = OuterKeyword;- structure T = Toplevel;- fun define_cmd name info f =- OuterSyntax.command name info (K.tag_proof K.prf_decl)- (SpecParse.name_facts >> (T.print oo (T.proof o (note_modified_thmss f))));+ Outer_Syntax.command name info+ (Parse_Spec.name_facts >> (Toplevel.print oo (Toplevel.proof o (note_modified_thmss f)))); in val _ = - define_cmd "note_prefix_closed" + define_cmd @{command_spec "note_prefix_closed"} "prefix close facts and store them under the given name" ESPL_Methods.prefix_close_thms; val _ = - define_cmd "note_unified" + define_cmd @{command_spec "note_unified"} "unify equality facts and store them under the given name" (unify true); (* TODO: Implement this command - currently it is just notes. *) val _ = - define_cmd "note_cyclic" + define_cmd @{command_spec "note_cyclic"} "try to derive a cyclicity violation from the given facts and store them under the given name" (K I); end *}---(*--lemma (in reachable_state) test : "X"-proof -- fix tid\<^isub>1 tid\<^isub>2 tid\<^isub>3- assume "s (MV ''ni'' tid\<^isub>1) = LN ''ni'' tid\<^isub>3"- and"s (MV ''ni'' tid\<^isub>1) = LN ''ni'' tid\<^isub>2"-ML_prf{*- unify true @{context} @{thms this}- handle THM (_,_,ths) => ths--*}- note_unified facts = this--lemma--*)--(*--ML{* @{const predOrd} *}-ML{* @{term "predOrd t (Ln \<lbrace>LN ''ni'' i, x\<rbrace>) (Ln y)"} *}-ML{*--case @{term "predOrd t (Ln \<lbrace>LN ''ni'' i, x\<rbrace>) (Ln y)"} of- (@{const predOrd} $ _ $ (@{const Ln} $ (Const (@{const_name Tup},_) $ _ $ _)) $ _) =>- Const ("YES 1", TFree ("blah",["blih"]))- | (Const (@{const_name predOrd}, _) $ _ $ _ $ _ ) =>- Const ("YES 2", TFree ("blah",["blih"]))- | (x $ _ $ _ $ _ ) =>- x- | _ => Const ("no", TFree ("blah",["blih"]))--*}--lemma test: - assumes facts:- "Enc x y = Enc t v"- "x = v"- shows "False"-proof -- note_unified this = facts- thm this-oops---text{* Testing the role definition command *}-role nslXInit-where "nslXInit \<equiv> - [ Send ''0'' (PEnc \<langle>sC ''0'', sAV ''I'', sN ''ni''\<rangle> (sPK ''R''))- , Recv ''1'' (PEnc \<langle>sC ''1'', sAV ''R'', sN ''ni'', sMV ''nr''\<rangle> (sPK ''I''))- , Send ''2'' (PEnc \<langle>sC ''2'', sMV ''nr''\<rangle> (sPK ''R''))- ]"--text{* An additional role for testing purposes. *}-role nslXResp-where "nslXResp \<equiv>- [ Recv ''0'' (PEnc \<langle>sC ''0'', sLAV ''I'', sLMV ''ni''\<rangle> (sPK ''R''))- , Send ''1'' (PEnc \<langle>sC ''1'', sLAV ''R'', sLMV ''ni'', sLN ''nr''\<rangle> (sPK ''I''))- , Recv ''2'' (PEnc \<langle>sC ''2'', sLN ''nr''\<rangle> (sPK ''R''))- ]"--protocol nslX-where "nslX = {nslXInit, nslXResp}"--locale atomic_nslX_state = typed_state nslX _ _ _ "weakly_atomic"--lemma (in atomic_nslX_state) SK_from_IK0:- assumes facts:- "SK a \<in> knows t"- shows "a \<in> Compromised"-using facts-proof(sources "SK a")-qed clarsimp--lemma (in atomic_nslX_state) I_sec_ni:- assumes facts:- "roleMap r i = Some nslXInit"- "Ln (Tup (LN ''ni'' i) x) \<prec> Ln y"- "s(AV ''I'' i) \<notin> Compromised"- "s(AV ''R'' i) \<notin> Compromised" - shows "False"-using facts-proof(sources! "LN ''ni'' i")- case nslXInit_0_ni- note_unified facts = facts this-thm split_before[OF `Ln \<lbrace>LN ''ni'' i, x\<rbrace> \<prec> Ln y`]-ML_prf{*-@{term "Ln \<lbrace>LN ''ni'' i, x\<rbrace> \<prec> Ln y"}-*}- thus ?thesis- proof(sources! "SK (s (AV ''R'' i))")- case ik0- note_unified facts = facts this- thus ?thesis by clarsimp- qed-next- case (nslXInit_2_nr i1)- note_unified facts = facts this- thus ?thesis- proof(sources! "inst s i1 nslXInit_1_pt")- case fake- note_unified facts = facts this- thus ?thesis by order- next- case (nslXResp_1_enc r1)- note_unified facts = facts this- thus ?thesis .- qed-next- case (nslXResp_1_ni r1)- note_unified facts = facts this- thus ?thesis- proof(sources "inst s r1 nslXResp_0_pt")- case fake- note_unified facts = facts this- thus ?thesis by order- next- case (nslXInit_0_enc i2)- note_unified facts = facts this- thus ?thesis- proof(sources! "SK (s (AV ''I'' i))")- case ik0- note_unified facts = facts this- thus ?thesis by clarsimp- qed- qed-qed------(* OLD TEST INFRASTRUCTURE---ML{*--val th1 = Thm.assume @{cterm "Trueprop (s (AV ''a'' i) = x)"};-val th2 = Thm.assume @{cterm "Trueprop (PK (s (AV ''a'' i)) = inv (y))"};-val th3 = Thm.assume @{cterm "Trueprop (Enc (LN ''a'' i) (PK (s (AV ''a'' j))) = - Enc (LN ''a'' j) (PK (s (AV ''b'' i))))"};-val th4 = Thm.assume @{cterm "Trueprop ((b::nat) < c)"};-val th5 = Thm.assume @{cterm "Trueprop ((x::execmsg) = Enc (Tup y (PK x)) z)"};---*}---ML{*--unify true @{context} [th1,th2,th3,th5,th1,th2,th3,th5,th1,th2,th3,th5,th1,th2,th3,th5]--*}--subsection{* Redefining the notes command *}--text{*- note[prefix_closed] this = facts- note[unified] this = facts--^ preferred version-- note this[unified] = facts--*}--ML{*--Proof.note_thmss-*}--ML{* --ProofContext.note_thmss-*}--note_prefix_closed-note_unified-note_cyclic--ML{*--local - structure P = OuterParse;- structure S = SpecParse;-- fun bling ctxt =- let val _ = Output.warning "test";- in ctxt end;-- fun modifier (name, f) = P.$$$ name >> K f;- val modifiers = [("test", (K bling)),("unified",unify true)];-in- val thms_mod = Scan.first (map modifier modifiers @ [Scan.succeed (K I)]);- val mod_name_facts = thms_mod -- S.name_facts-end-*}- ---lemma test: "blah"-proof -- note_prefix_closed unified = sym allI- and blah = ballI- thm this- thm blah- thm unified- ------*)--role C-where "C =- [ Send ''1'' ( PEnc ( sN ''k'' ) ( sPK ''S'' ) )- , Recv ''2'' ( PHash ( sN ''k'' ) ) - ]" --role S-where "S =- [ Recv ''1'' ( PEnc ( sMV ''k'' ) ( sPK ''S'' ) )- , Send ''2'' ( PHash ( sMV ''k'' ) ) - ]" --protocol CR-where "CR = { C, S }"--locale atomic_CR_state = atomic_state CR-locale CR_state = reachable_state CR--lemma (in atomic_CR_state) C_secret_k:- assumes facts:- "roleMap r i\<^isub>0 = Some C"- "s(AV ''S'' i\<^isub>0) \<notin> Compromised"- "LN ''k'' i\<^isub>0 \<in> knows t"- shows "False"-using facts proof(sources! " LN ''k'' i\<^isub>0 ")- case C_1_k note_unified facts = this facts- thus ?thesis proof(sources! " SK ( s(AV ''S'' i\<^isub>0) ) ")- qed (insert facts, ((clarsimp, order?))+)?-qed--lemma (in CR_state) weak_atomicity:- "complete (t,r,s) atomicAnn"-proof (cases rule: complete_atomicAnnI[completeness_cases_rule])- case (S_1_k t r s i\<^isub>0) note facts = this- then interpret state: atomic_state CR t r s- by unfold_locales assumption+- show ?case using facts- proof(sources! "- Enc ( s(MV ''k'' i\<^isub>0) ) ( PK ( s(AV ''S'' i\<^isub>0) ) ) ")- qed (insert facts, ((fastsimp simp: atomicAnn_def dest: state.extract_knows_hyps))+)?-qed--lemma (in atomic_CR_state) C_ni_synch:- assumes facts:- "roleMap r i\<^isub>1 = Some C"- "s(AV ''S'' i\<^isub>1) \<notin> Compromised"- "(i\<^isub>1, C_2) \<in> steps t"- shows- "\<exists>i\<^isub>2.- roleMap r i\<^isub>2 = Some S &- s(AV ''S'' i\<^isub>2) = s(AV ''S'' i\<^isub>1) &- s(MV ''k'' i\<^isub>2) = LN ''k'' i\<^isub>1 &- St(i\<^isub>1, C_1) \<prec> St(i\<^isub>1, C_2) &- St(i\<^isub>1, C_1) \<prec> St(i\<^isub>2, S_1) &- St(i\<^isub>2, S_2) \<prec> St(i\<^isub>1, C_2) &- St(i\<^isub>2, S_1) \<prec> St(i\<^isub>2, S_2)"-proof -- note_prefix_closed facts = facts- thus ?thesis proof(sources! " Hash ( LN ''k'' i\<^isub>1 ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: C_secret_k intro: event_predOrdI)- next- case (S_2_hash i\<^isub>2) note_unified facts = this facts- thus ?thesis proof(sources! "- Enc ( LN ''k'' i\<^isub>1 ) ( PK ( s(AV ''S'' i\<^isub>2) ) ) ")- case fake note_unified facts = this facts- thus ?thesis by (fastsimp dest: C_secret_k intro: event_predOrdI)- next- case C_1_enc note_unified facts = this facts- thus ?thesis by force- qed- qed-qed--*) end
data/isabelle/src/ESPLogic/WeakTyping.thy view
@@ -35,17 +35,17 @@ to their type. *} -types msgtype = "tid \<Rightarrow> state \<Rightarrow> execmsg set"+type_synonym msgtype = "tid \<Rightarrow> state \<Rightarrow> execmsg set" -types typing = "(role \<times> id) \<Rightarrow> msgtype"+type_synonym typing = "(role \<times> id) \<Rightarrow> msgtype" definition approx :: "typing \<Rightarrow> state set"-where "approx typing q \<equiv> case q of (t,r,s) \<Rightarrow>+where "approx typing \<equiv> {q. case q of (t,r,s) \<Rightarrow> \<forall> (i,step) \<in> steps t. \<forall> R. roleMap r i = Some R \<longrightarrow> (\<forall> n. MVar n \<in> FV (stepPat step) \<longrightarrow> s (MVar n, i) \<in> typing (R, n) i (t,r,s)- )"+ )}" locale typed_state = reachable_state+ fixes typing :: "typing"@@ -65,7 +65,7 @@ \<forall> R. roleMap r i = Some R \<longrightarrow> (\<forall> n. MVar n \<in> FV (stepPat step) \<longrightarrow> s (MVar n, i) \<in> typing (R, n) i (t,r,s)))"-by (auto simp: approx_def mem_def)+by (auto simp: approx_def) lemma in_approxI: assumes all_vars:@@ -299,7 +299,7 @@ then obtain l' msg' where "(i, Recv l' msg') \<in> steps t" "MVar n \<in> FV msg'"- by (fastsimp dest!: th1.send_step_FV[OF th1.thread_exists])+ by (fastforce dest!: th1.send_step_FV[OF th1.thread_exists]) hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)" by (auto dest: IH[OF th1.thread_exists]) have "done'@todo' = ?role"@@ -388,9 +388,9 @@ apply - apply(drule listOrd_append[THEN iffD1]) apply(case_tac "listOrd done (Recv l'' pt'') (Note l' ty' pt')")- apply(fastsimp dest: in_set_listOrd1)+ apply(fastforce dest: in_set_listOrd1) apply(case_tac "listOrd (Recv l pt # todo) (Recv l'' pt'') (Note l' ty' pt')")- apply(fastsimp dest: in_set_listOrd2 th1.done_notin_todoD)+ apply(fastforce dest: in_set_listOrd2 th1.done_notin_todoD) apply(case_tac "Recv l'' pt'' \<in> set done \<and> Note l' ty' pt' \<in> set (Recv l pt # todo)") by(auto dest: th1.done_notin_todoD) hence "(i, Recv l'' pt'') \<in> steps t" by auto@@ -424,7 +424,7 @@ done qed }- ultimately show ?case by fastsimp+ ultimately show ?case by fastforce next case (compr t r s i "done" l ty pt todo skipped m i' done' todo' step n skipped') then interpret th1: @@ -450,7 +450,7 @@ then obtain l' msg' where "(i, Recv l' msg') \<in> steps t" "MVar n \<in> FV msg'"- by (fastsimp dest!: th1.note_step_FV[OF th1.thread_exists])+ by (fastforce dest!: th1.note_step_FV[OF th1.thread_exists]) hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)" by (auto dest: IH[OF th1.thread_exists]) have "done'@todo' = ?role"@@ -974,7 +974,7 @@ then interpret th1: typed_thread P t r s i "done" todo skipped "typing" using approximates by unfold_locales from inDone and notinSkipped have note_step: "(i, Note l ty pt) \<in> steps t" - by (fastsimp dest!: th1.in_steps_eq_in_done)+ by (fastforce dest!: th1.in_steps_eq_in_done) moreover have "prefixClose s t (done@todo) (Note l ty pt) i" using note_step by(auto intro!: prefixCloseI th1.roleMap)@@ -994,7 +994,7 @@ hence ?thesis by blast } ultimately- show ?thesis by fastsimp+ show ?thesis by fastforce qed @@ -1025,9 +1025,9 @@ apply(erule disjE) apply(clarsimp) apply(rule disjI2)- apply(fastsimp intro: less_le_trans)+ apply(fastforce intro: less_le_trans) done-qed fastsimp++qed fastforce+ lemma (in reachable_state) decrChain_KnownT: assumes decrChain: "decrChain path t from m m'"@@ -1039,7 +1039,7 @@ where "im \<in> pairParts m" and "\<forall>f \<in> from. f \<prec> Ln im" using decrChain by (fast dest!: decrChain_imp_predOrd) with KnownT show ?thesis- by (fastsimp intro: pairParts_before)+ by (fastforce intro: pairParts_before) qed lemma (in reachable_state) decrChain_KnownTE:
data/isabelle/src/ESPLogic/espl_definitions.ML view
@@ -21,7 +21,7 @@ (* Additional Utilities *) val unnamed_caseN: string - datatype steptyp = Recv | Send+ datatype steptyp = Recv | Send | Note of term val mk_rolestep: steptyp * term * term -> term val dest_rolestep: term -> steptyp * term * term val dest_role: term -> (steptyp * term * term) list@@ -120,26 +120,26 @@ TODO: Check if there is a more stable machinery for that purpose. *)-fun get_unfold_thms ctxt (Const (c,_)) = ProofContext.get_thms ctxt (c ^ ".unfold")- | get_unfold_thms ctxt (Free (c,_)) = ProofContext.get_thms ctxt (c ^ ".unfold")+fun get_unfold_thms ctxt (Const (c,_)) = Proof_Context.get_thms ctxt (c ^ ".unfold")+ | get_unfold_thms ctxt (Free (c,_)) = Proof_Context.get_thms ctxt (c ^ ".unfold") | get_unfold_thms _ t = raise TERM ("get_unfold_thms", [t]) (* Lookup the term of the message of a role step *) fun get_rolestep_msg ctxt step_name = - ProofContext.get_thm ctxt (Thm.def_name (step_name ^ "_pt"))+ Proof_Context.get_thm ctxt (Thm.def_name (step_name ^ "_pt")) |> Thm.prop_of |> dest_HOL_def |> snd (* Extract identifiers of message variables in a pattern *) fun pat_msgvars (Const (@{const_name "PEnc"},_) $ m $ k) = - OrdList.union fast_string_ord (pat_msgvars m) (pat_msgvars k)+ Ord_List.union fast_string_ord (pat_msgvars m) (pat_msgvars k) | pat_msgvars (Const (@{const_name "PTup"},_) $ x $ y) = - OrdList.union fast_string_ord (pat_msgvars x) (pat_msgvars y)+ Ord_List.union fast_string_ord (pat_msgvars x) (pat_msgvars y) | pat_msgvars (Const (@{const_name "PHash"},_) $ x) = pat_msgvars x | pat_msgvars (Const (@{const_name "PSymK"},_) $ a $ b) = - OrdList.union fast_string_ord (pat_msgvars a) (pat_msgvars b)+ Ord_List.union fast_string_ord (pat_msgvars a) (pat_msgvars b) | pat_msgvars (Const (@{const_name "PAsymPK"},_) $ a) = pat_msgvars a | pat_msgvars (Const (@{const_name "PAsymSK"},_) $ a) =@@ -288,7 +288,7 @@ pat_def |> Thm.prop_of |> dest_HOL_def |> #2 |> pat_msgvars; val msgvars = Library.foldl - (fn (vs,def) => OrdList.union fast_string_ord vs (pat_def_msgvars def)) + (fn (vs,def) => Ord_List.union fast_string_ord vs (pat_def_msgvars def)) ([],pat_defs); in@@ -346,16 +346,12 @@ end (* registering the role definition command as an outer keyword *)-local structure P = OuterParse and K = OuterKeyword in-- val roledef_parser = - P.binding --| P.where_ -- (SpecParse.opt_thm_name ":" -- P.prop);-- val _ =- OuterSyntax.local_theory "role" "security protocol role definition" - K.thy_decl (roledef_parser >> (fn spec => define_role_cmd spec #> snd));-end;+val roledef_parser = + Parse.binding --| Parse.where_ -- (Parse_Spec.opt_thm_name ":" -- Parse.prop); +val _ =+ Outer_Syntax.local_theory @{command_spec "role"} "security protocol role definition" + (roledef_parser >> (fn spec => define_role_cmd spec #> snd)); (****************************************************************************** ** Protocol Definitions@@ -402,14 +398,14 @@ let val ((proto_const, (_, proto_def)), spec_ctxt) = params_ctxt |> Specification.definition_cmd - (SOME (raw_bind, SOME "Protocol.proto", NoSyn), raw_spec);+ (SOME (raw_bind, SOME "Protocol.proto", NoSyn), raw_spec) true; val proto_name = Binding.name_of raw_bind; fun mk_rel_binding name = (Binding.qualify true proto_name (Binding.name name), srcs); in setup_proto mk_rel_binding (proto_const, proto_def) spec_ctxt- |> apsnd (Local_Theory.theory (fn thy =>+ |> apsnd (Local_Theory.raw_theory (fn thy => let val locale_b = Binding.name (proto_name ^ "_state"); val _ = Output.writeln ("\nlocale\n " ^ (Binding.name_of locale_b));@@ -424,15 +420,14 @@ end; (* registering the protocol definition command *)-local structure P = OuterParse and K = OuterKeyword in- val protodef_parser = - P.binding --| P.where_ -- (SpecParse.opt_thm_name ":" -- P.prop);- val _ =- OuterSyntax.local_theory "protocol" "security protocol definition" - K.thy_decl (protodef_parser >> (fn spec => define_proto_cmd spec #> #2));-end;+val protodef_parser = + Parse.binding --| Parse.where_ -- (Parse_Spec.opt_thm_name ":" -- Parse.prop); +val _ =+ Outer_Syntax.local_theory @{command_spec "protocol"} "security protocol definition" + (protodef_parser >> (fn spec => define_proto_cmd spec #> #2)); + (****************************************************************************** ** Sources Case Name Computation ******************************************************************************)@@ -550,7 +545,7 @@ (* Insert the case names into a theorem *) fun insert_case_names ctxt th = let- val thy = ProofContext.theory_of ctxt;+ val thy = Proof_Context.theory_of ctxt; val cases = source_case_names th; val case_hint = Hints.mk_hint_thm thy "case_name" o HOLogic.mk_string o nth cases; fun ins_tac (_,i) = Method.insert_tac [case_hint (i-1)] i;@@ -638,13 +633,13 @@ ] in (FIRST' (map mk_elim_tac ty_elim_ths)) THEN'- (TRY o Clasimp.clarsimp_tac (clasimpset_of ctxt))+ (TRY o Clasimp.clarsimp_tac ctxt) end; fun expand_knows_cases_tac ctxt ty_elim_ths = REPEAT_DETERM1 (- FIRST [ safe_tac (claset_of ctxt)+ FIRST [ safe_tac ctxt , CHANGED_PROP (TRYALL (full_simp_tac (simpset_of ctxt))) , CHANGED_PROP (TRYALL (type_elim_tac ctxt ty_elim_ths)) ] @@ -690,7 +685,7 @@ val knows_ct = HOLogic.mk_mem (msg_t, @{term "knows t"}) |> HOLogic.mk_Trueprop- |> Thm.cterm_of (ProofContext.theory_of lthy);+ |> Thm.cterm_of (Proof_Context.theory_of lthy); val knows_th = Thm.assume knows_ct; in @@ -698,7 +693,7 @@ |> HOL_Ext.make_HOL_elim |> refine_knows_cases lthy (SOME msg_t) |> Thm.implies_intr knows_ct- |> singleton (ProofContext.export lthy ctxt) + |> singleton (Proof_Context.export lthy ctxt) |> Drule.zero_var_indexes end; @@ -706,7 +701,7 @@ (*** Precomputing and storing chain rule expansion in the actual theory ***) structure KnowsCasesCache = Named_Thms- (val name ="knows_cases_cache"+ (val name = @{binding "knows_cases_cache"} val description = "Cache of protocol and message specific specializations of the knows_cases theorem") (* shorthand for attributes modifying the knowledge cases *)@@ -758,10 +753,9 @@ let val (typ_const,typ_def) = ann_def; - val cs = Classical.claset_of ctxt;- val ss = Simplifier.simpset_of ctxt - addsimps [typ_def];- val ss_full = ss addsimps @{thms mk_typing_def};+ val autom_tac = auto_tac (map_simpset (fn ss => ss addsimps [typ_def]) ctxt)+ val ss_full = Simplifier.simpset_of ctxt + addsimps [typ_def] addsimps @{thms mk_typing_def}; val vars = typ_def |> Thm.prop_of |> ESPL_Utils.dest_HOL_def |> snd |> dest_mk_typing |> map fst;@@ -770,9 +764,9 @@ val mono_typ_th = (@{const monoTyp} $ typ_const) |> HOLogic.mk_Trueprop- |> Thm.cterm_of (ProofContext.theory_of ctxt)+ |> Thm.cterm_of (Proof_Context.theory_of ctxt) |> (fn ct => Goal.prove_internal [] ct- (K (auto_tac (cs, ss)))+ (K autom_tac) ); in ctxt@@ -792,9 +786,9 @@ (Binding.qualify true (Binding.name_of b) (Binding.name name), srcs); val ((typ_const, (_, typ_def)), spec_ctxt) = params_ctxt - |> Specification.definition_cmd + |> Specification.definition_cmd (SOME (b, SOME "WeakTyping.typing", NoSyn)- , ((att,srcs), raw_def));+ , ((att,srcs), raw_def)) true; in setup_typing mk_rel_binding (typ_const, typ_def) spec_ctxt end;@@ -811,7 +805,7 @@ fun type_invariant_cmd (spec as ((typing_b,proto_name),_)) lthy = lthy |> #2 o define_typing_cmd spec- |> Local_Theory.theory (fn thy =>+ |> Local_Theory.raw_theory (fn thy => let val typ_name = Binding.name_of typing_b; val typ_t = Syntax.read_term_global thy typ_name;@@ -821,7 +815,7 @@ val (_,lthy) = add_type_invariant_locale (locale_b, (typ_t, proto_t)) thy;- val case_th = ProofContext.get_thm lthy "knows_cases";+ val case_th = Proof_Context.get_thm lthy "knows_cases"; in lthy |> #2 o precompute_source_elim_rules case_th@@ -830,14 +824,14 @@ ); (* register the type invariant definition command *)-local structure P = OuterParse and K = OuterKeyword in+local structure P = Parse and K = Keyword in val for_proto = P.$$$ "for" |-- P.term; val type_invariant_parser = - P.binding -- for_proto --| P.where_ -- (SpecParse.opt_thm_name ":" -- P.prop);+ P.binding -- for_proto --| P.where_ -- (Parse_Spec.opt_thm_name ":" -- P.prop); val _ =- OuterSyntax.local_theory "type_invariant" "type invariant definition" - K.thy_decl (type_invariant_parser >> type_invariant_cmd);+ Outer_Syntax.local_theory @{command_spec "type_invariant"} "type invariant definition" + (type_invariant_parser >> type_invariant_cmd); end; end;
data/isabelle/src/ESPLogic/espl_methods.ML view
@@ -20,8 +20,8 @@ : Proof.context -> bool -> term -> thm option -> thm list -> int -> thm -> (cases * thm) Seq.seq val sourcesP- : Context.generic * OuterLex.token list ->- ((bool * term) * thm option) * (Context.generic * OuterLex.token list)+ : Context.generic * Token.T list ->+ ((bool * term) * thm option) * (Context.generic * Token.T list) (* "prefix_close" proof state transformation *) val prefix_close_thms: Proof.context -> thm list -> thm list@@ -69,7 +69,7 @@ else TRY o Method.insert_tac facts' THEN' TRY o (- Clasimp.clarsimp_tac (clasimpset_of ctxt) THEN'+ Clasimp.clarsimp_tac ctxt THEN' TRY o Orders.order_tac ctxt [] ) )@@ -86,9 +86,9 @@ (* The tactic underlying the "sources" proof method *) fun sources_tac ctxt minimal msg_t opt_raw_rule facts = let- val thy = ProofContext.theory_of ctxt;+ val thy = Proof_Context.theory_of ctxt; val cert = Thm.cterm_of thy;- val css as (_, ss) = Clasimp.clasimpset_of ctxt;+ val ss = simpset_of ctxt; val raw_rules = case opt_raw_rule of SOME th => [th]@@ -113,7 +113,7 @@ (fn facts' => ALLGOALS (Method.insert_tac (facts' @ facts)) THEN (ALLGOALS (assume_tac ORELSE' eresolve_tac predOrd_elim_ths)- ORELSE auto_tac (css addIs2 predOrd_elim_ths))+ ORELSE auto_tac (ctxt addIs predOrd_elim_ths)) ) |> simplify ss @@ -123,7 +123,7 @@ | SOME th => finalize_knows_cases ctxt minimal facts th in fn i => fn st =>- CASES (Rule_Cases.make_common false (thy, Thm.prop_of rule) (fst cases)+ CASES (Rule_Cases.make_common (thy, Thm.prop_of rule) (fst cases) ) (Tactic.rtac rule i) st end;@@ -139,10 +139,9 @@ explicitly. *) local- structure P = OuterParse; val ruleN = "rule"; val rule = Scan.lift (Args.$$$ ruleN -- Args.colon) |-- Attrib.thm;- val opt_bang = Scan.lift (Scan.optional (P.$$$ "!" >> K true) false);+ val opt_bang = Scan.lift (Scan.optional (Parse.$$$ "!" >> K true) false); in val sourcesP = opt_bang -- Args.term -- Scan.option rule; end;@@ -182,7 +181,7 @@ *) fun prefix_close_thms ctxt facts = let- val prefixClose_th = ProofContext.get_thm ctxt "ext_prefixClose";+ val prefixClose_th = Proof_Context.get_thm ctxt "ext_prefixClose"; fun close step roleMap = [step, roleMap] MRS prefixClose_th; val expand = Simplifier.simplify (Simplifier.simpset_of ctxt); val distinct_prop = distinct (Thm.eq_thm);@@ -207,7 +206,7 @@ let val ctxt = Proof.context_of state; val facts = Proof.the_facts state; val facts' = facts @ prefix_close_thms ctxt facts- in Proof.put_facts (SOME facts') state end+ in Proof.set_facts facts' state end (* A proof state transformation implementing prefix closing of the currently used facts.@@ -219,12 +218,11 @@ |> (fn {context = ctxt, facts=using, goal=_} => prefix_close_thms ctxt using) - in Proof.using_i [[(using,[])]] state end;+ in Proof.using [[(using,[])]] state end; (* registering the prefix_close command *) val _ =- OuterSyntax.command "prefix_close" "prefix close facts being used"- (OuterKeyword.tag_proof OuterKeyword.prf_decl)+ Outer_Syntax.command @{command_spec "prefix_close"} "prefix close facts being used" (Scan.succeed (Toplevel.print o (Toplevel.proof prefix_close_cmd))); @@ -277,7 +275,7 @@ in th- |> SINGLE (REPEAT (safe_tac cs THEN (TRYALL (full_simp_tac ss)))) + |> SINGLE (REPEAT (safe_tac (Context.proof_of ctxt) THEN (TRYALL (full_simp_tac ss)))) |> the |> add_case_info end
data/isabelle/src/ESPLogic/espl_utils.ML view
@@ -103,19 +103,19 @@ premises *) val local_standard' =- forall_intr_frees+ Thm.forall_intr_frees #> `Thm.maxidx_of #-> (fn maxidx => Thm.forall_elim_vars (maxidx + 1) #> Thm.strip_shyps #> zero_var_indexes- #> Thm.varifyT);+ #> Thm.varifyT_global); (* Generate the theorem proving the expansion of a term wrto to the given simpset and convert it into a rule. *) fun expand_term ss t = t- |> Thm.cterm_of (ProofContext.theory_of (MetaSimplifier.the_context ss))+ |> Thm.cterm_of (Proof_Context.theory_of (Raw_Simplifier.the_context ss)) |> Simplifier.rewrite ss |> (fn conv => conv RS @{thm meta_eq_to_obj_eq}) |> local_standard'@@ -125,7 +125,7 @@ (* create a simpset consisting only of the given theorems in the given context *) fun thms_to_simpset ctxt ths = - Simplifier.context ctxt (MetaSimplifier.empty_ss addsimps ths);+ Simplifier.context ctxt (Raw_Simplifier.empty_ss addsimps ths); (* Expand a list of terms and note the resulting theorems. *) fun notes_expansion ss to_expand = @@ -151,7 +151,7 @@ inst is a positional instantiation. *) fun add_simple_locale b loc_name inst thy =- Expression.add_locale b (Binding.empty)+ Expression.add_locale I b (Binding.empty) ( [ ( Locale.intern thy loc_name , ( ("",false) , Expression.Positional inst
data/isabelle/src/compromising_adversaries/CR_paper_acm.thy view
@@ -71,7 +71,7 @@ show ?case using facts proof(sources! " Enc ( s(MV ''k'' tid0) ) ( PK ( s(AV ''S'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? qed thus "auto_msc_typing_state t r s" by unfold_locales auto qed@@ -213,12 +213,12 @@ proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid')))") case C_2_enc thus ?thesis - by (fastsimp dest: compr_predOrdI)+ by (fastforce dest: compr_predOrdI) qed next case C_5_k thus ?thesis- by (fastsimp dest: compr_predOrdI)+ by (fastforce dest: compr_predOrdI) qed qed @@ -232,7 +232,7 @@ shows False using facts-by(fastsimp dest: C_k_origin allowed_reveals)+by(fastforce dest: C_k_origin allowed_reveals) lemma (in CR_state_ADVint) C_k_secrecy_others: assumes facts:@@ -313,7 +313,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_protected intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_protected intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -323,23 +323,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_protected intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_protected intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_protected intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_protected intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed@@ -363,7 +363,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_others intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_others intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -373,23 +373,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_others intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_others intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_others intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_others intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed@@ -412,7 +412,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_sessKey intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_sessKey intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -422,23 +422,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_sessKey intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_sessKey intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_sessKey intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_sessKey intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed@@ -461,7 +461,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_state intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_state intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -471,23 +471,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_state intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_state intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_state intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_state intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed@@ -510,7 +510,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_actor intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_actor intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -520,23 +520,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_actor intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_actor intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_actor intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_actor intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed@@ -561,7 +561,7 @@ proof(sources "Hash ( LN ''k'' test )") case fake thus ?thesis - by(fastsimp dest: C_k_secrecy_all intro: event_predOrdI)+ by(fastforce dest: C_k_secrecy_all intro: event_predOrdI) next case (S_3_hash tid2) thus ?thesis@@ -571,23 +571,23 @@ next case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_all intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_all intro: event_predOrdI) qed next case C_3_hash thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) next case (S_2_hash tid2) thus ?thesis proof(sources "Enc (LN ''k'' test) (PK (s (AV ''S'' tid2)))") case fake thus ?thesis- by (fastsimp dest: C_k_secrecy_all intro: event_predOrdI)+ by (fastforce dest: C_k_secrecy_all intro: event_predOrdI) next case C_2_enc thus ?thesis- by(fastsimp dest: compr_predOrdI allowed_reveals)+ by(fastforce dest: compr_predOrdI allowed_reveals) qed qed qed
data/isabelle/src/compromising_adversaries/NS_Public_acm.thy view
@@ -75,7 +75,7 @@ s(AV ''R'' tid0) |} ( PK ( s(AV ''I'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? next case (R_1_ni t r s tid0) note facts = this@@ -85,7 +85,7 @@ proof(sources! " Enc {| LC ''1'', s(MV ''ni'' tid0), s(AV ''I'' tid0) |} ( PK ( s(AV ''R'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? qed thus "auto_msc_typing_state t r s" by unfold_locales auto qed@@ -199,7 +199,7 @@ "Enc {| LC ''2'', LN ''ni'' test, s(MV ''nr'' test), s(AV ''R'' test)|} ( PK ( s(AV ''I'' test) ) ) ") case fake thus ?thesis- by(fastsimp dest: I_ni_origin intro: event_predOrdI)+ by(fastforce dest: I_ni_origin intro: event_predOrdI) next case (R_2_enc tid1') thus ?thesis@@ -223,18 +223,18 @@ proof(sources "Enc {| LC ''3'', LN ''nr'' test |} ( PK ( s(AV ''R'' test) ) ) ") case fake thus ?thesis - by (fastsimp dest: R_nr_origin intro: event_predOrdI)+ by (fastforce dest: R_nr_origin intro: event_predOrdI) next case (I_3_enc tid1) thus ?thesis proof(sources "Enc {| LC ''2'', LN ''ni'' tid1, LN ''nr'' test, s(AV ''R'' test)|}( PK ( s(AV ''I'' tid1) ) ) ") case fake thus ?thesis- by(fastsimp dest: R_nr_origin intro: event_predOrdI) + by(fastforce dest: R_nr_origin intro: event_predOrdI) next case R_2_enc thus ?thesis - by (fastsimp dest: I_ni_origin intro: event_predOrdI) + by (fastforce dest: I_ni_origin intro: event_predOrdI) qed qed qed@@ -256,7 +256,7 @@ proof(sources "Hash \<lbrace>LN ''ni'' test, s (MV ''nr'' test)\<rbrace>") case fake thus ?thesis- by(fastsimp dest: I_ni_origin intro: event_predOrdI)+ by(fastforce dest: I_ni_origin intro: event_predOrdI) next case I_4_hash thus ?thesis@@ -268,7 +268,7 @@ (PK (s (AV ''I'' test)))") case fake thus ?thesis- by(fastsimp dest: I_ni_origin intro: event_predOrdI)+ by(fastforce dest: I_ni_origin intro: event_predOrdI) next case R_2_enc thus ?thesis@@ -294,7 +294,7 @@ proof(sources "Hash \<lbrace>s (MV ''ni'' test), LN ''nr'' test\<rbrace>") case fake thus ?thesis- by(fastsimp dest: R_nr_origin intro: event_predOrdI)+ by(fastforce dest: R_nr_origin intro: event_predOrdI) next case R_4_hash thus ?thesis@@ -306,7 +306,7 @@ (PK (s (AV ''I'' tid1)))") case fake thus ?thesis- by(fastsimp dest: R_nr_origin intro: event_predOrdI)+ by(fastforce dest: R_nr_origin intro: event_predOrdI) next case R_2_enc thus ?thesis@@ -324,7 +324,7 @@ "LN ''ni'' test \<in> knows t" shows "False" using facts-by(insert I_ni_origin, fastsimp dest!: allowed_reveals)+by(insert I_ni_origin, fastforce dest!: allowed_reveals) lemma (in ns_public_state_ADVall) R_nr_secrecy: assumes facts:@@ -332,7 +332,7 @@ "LN ''nr'' test \<in> knows t" shows "False" using facts-by(insert R_nr_origin, fastsimp dest!: allowed_reveals)+by(insert R_nr_origin, fastforce dest!: allowed_reveals) lemma (in ns_public_state_ADVall) I_nr_secrecy: assumes facts:@@ -341,7 +341,7 @@ "s(MV ''nr'' test) \<in> knows t" shows "False" using facts-by(insert I_nr_origin, fastsimp dest!: allowed_reveals)+by(insert I_nr_origin, fastforce dest!: allowed_reveals) lemma (in ns_public_state_ADVall) R_ni_secrecy:@@ -351,7 +351,7 @@ "s(MV ''ni'' test) \<in> knows t" shows "False" using facts-by(insert R_ni_origin, fastsimp dest!: allowed_reveals)+by(insert R_ni_origin, fastforce dest!: allowed_reveals) lemma (in ns_public_state_ADVall) I_sessKey_secrecy: assumes facts:@@ -410,7 +410,7 @@ next case I_1_enc thus ?thesis- by(fastsimp)+ by(fastforce) qed qed qed
data/isabelle/src/compromising_adversaries/PFS_acm.thy view
@@ -82,8 +82,8 @@ thus ?thesis proof(sources! " Enc \<lbrace> LC ''2'', s(AV ''A'' tid0), s(MV ''k'' tid0) \<rbrace> ( SK ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)? next case (B_1_pkNa t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s@@ -92,7 +92,7 @@ proof(sources! " Enc \<lbrace> LC ''1'', s(AV ''B'' tid0), s(MV ''pkNa'' tid0) \<rbrace> ( SK ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? qed thus "auto_msc_typing_state t r s" by unfold_locales auto qed@@ -156,7 +156,7 @@ ( SK ( s(AV ''A'' test) ) ) ") case fake thus ?thesis - by (sources "SK (s (AV ''A'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''A'' test))") (fastforce intro: predOrd_distinct'_trans) next case (A_1_enc tid1) thus ?thesis @@ -177,7 +177,7 @@ (SK (s (AV ''A'' tid1)))") case fake thus ?thesis- by (sources "SK (s (AV ''A'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''A'' test))") (fastforce intro: predOrd_distinct'_trans) next case (A_1_enc tid1') thus ?thesis@@ -218,7 +218,7 @@ ( SK ( s(AV ''B'' test) ) ) ") case fake thus ?thesis- by (sources "SK (s (AV ''B'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''B'' test))") (fastforce intro: predOrd_distinct'_trans) next case (B_2_enc_1 tid1) thus ?thesis@@ -226,7 +226,7 @@ (SK (s (AV ''A'' test)))") case fake thus ?thesis- by (sources "SK (s (AV ''A'' tid1))")(fastsimp intro: predOrd_distinct'_trans) next+ by (sources "SK (s (AV ''A'' tid1))")(fastforce intro: predOrd_distinct'_trans) next case (A_1_enc tid1') thus ?thesis by (sources "SK (LN ''na'' tid1')")@@ -345,7 +345,7 @@ proof(sources "Enc \<lbrace>LC ''2'', s (AV ''A'' test), s (MV ''k'' test)\<rbrace> (SK (s (AV ''B'' test)))") case fake thus ?thesis- by (fastsimp dest: A_sec_k event_predOrdI)+ by (fastforce dest: A_sec_k event_predOrdI) next case (B_2_enc_1 tid1) thus ?thesis@@ -357,7 +357,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case (A_1_enc test)@@ -376,7 +376,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case A_1_enc@@ -426,7 +426,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals) + by (fastforce dest: allowed_reveals) qed next case B_2_enc_1@@ -439,7 +439,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case (A_1_enc tid2)@@ -458,7 +458,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case A_1_enc
data/isabelle/src/compromising_adversaries/TLS_acm.thy view
@@ -142,31 +142,31 @@ then interpret state: auto_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (C_4_ps t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (S_1_nc t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (S_1_pc t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (S_1_sid t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s by unfold_locales auto show ?case using facts- by (fastsimp intro: event_predOrdI split: if_splits)+ by (fastforce intro: event_predOrdI split: if_splits) next case (S_5_pms t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s@@ -175,7 +175,7 @@ proof(sources! " Enc {| LC ''TT0'', s(MV ''pms'' tid0) |} ( PK ( s(AV ''S'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? qed thus "auto_msc_typing_state t r s" by unfold_locales auto qed@@ -1339,7 +1339,7 @@ proof - from facts have "roleMap r tid1 = Some S"- by (fastsimp dest: mk_partneringRole simp add: TLS_partners_conv)+ by (fastforce dest: mk_partneringRole simp add: TLS_partners_conv) note_prefix_closed facts = facts this thus ?thesis proof -@@ -1348,14 +1348,14 @@ {(sLAV ''C'', sLAV ''C'', S_1), (sLAV ''S'', sLAV ''S'', S_1), (sLMV ''ns'', sLN ''ns'', S_3), (sLN ''pms'', sLMV ''pms'', S_5)} (t, r, s)"- by (fastsimp simp add: TLS_partners_conv dest: mk_partneringRole)+ by (fastforce simp add: TLS_partners_conv dest: mk_partneringRole) moreover from facts have "(i, test) \<in> mk_partnering TLS_acm.C S {(sLAV ''C'', sLAV ''C'', S_1), (sLAV ''S'', sLAV ''S'', S_1), (sLMV ''ns'', sLN ''ns'', S_3), (sLN ''pms'', sLMV ''pms'', S_5)} (t, r, s)"- by (fastsimp simp add: TLS_partners_conv dest: mk_partneringRole)+ by (fastforce simp add: TLS_partners_conv dest: mk_partneringRole) ultimately show ?thesis using facts@@ -1485,12 +1485,12 @@ note_unified facts = facts this hence "(test,tid1) \<in> TLS_partners (t,r,s)"- by fastsimp+ by fastforce note_unified facts = facts this moreover { assume "RLKR (s (AV ''S'' tid1)) \<in> reveals t"- hence "?thesis" using facts by fastsimp+ hence "?thesis" using facts by fastforce } moreover{ assume "(tid1, Note ''5'' State C_5_pt) \<in> steps t"@@ -1509,20 +1509,20 @@ note_unified facts = facts this obtain tid1a where partCompr: "(tid1, tid1a) \<in> TLS_partners (t, r, s) \<and> (tid1a, Note ''6'' State S_6_pt) \<in> steps t"- using facts by fastsimp+ using facts by fastforce hence "test = tid1a" using facts apply - apply(rule TLS_partners_revealsExist,assumption,assumption,rule event_predOrdI, assumption) - by fastsimp++ by fastforce+ hence "?thesis" using facts partCompr- by fastsimp+ by fastforce } ultimately show ?thesis using facts apply - apply(frule event_predOrdI, frule C_pms_origin_reuse, assumption)- by fastsimp+ by fastforce qed qed end
data/isabelle/src/compromising_adversaries/wPFS_acm.thy view
@@ -93,8 +93,8 @@ Enc \<lbrace> LC ''2'', LN ''sid'' tid0, s(AV ''A'' tid0), s(MV ''k'' tid0) \<rbrace> ( SK ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)? next case (B_1_pkNa t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s@@ -105,7 +105,7 @@ s(MV ''pkNa'' tid0) \<rbrace> ( SK ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? next case (B_1_sid t r s tid0) note facts = this then interpret state: auto_msc_typing_state t r s@@ -116,7 +116,7 @@ s(MV ''pkNa'' tid0) \<rbrace> ( SK ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastsimp intro: event_predOrdI split: if_splits) | (fastsimp intro: event_predOrdI split: if_splits))+)?+ qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits) | (fastforce intro: event_predOrdI split: if_splits))+)? qed thus "auto_msc_typing_state t r s" by unfold_locales auto qed@@ -181,18 +181,18 @@ (SK (s (AV ''A'' test)))") case fake thus ?thesis- by (sources "SK (s (AV ''A'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''A'' test))") (fastforce intro: predOrd_distinct'_trans) next case (A_1_enc tid1) thus ?thesis proof(sources " SK ( LN ''na'' tid1 ) ") case A_N1_SK thus ?thesis - by (fastsimp intro: compr_predOrdI)+ by (fastforce intro: compr_predOrdI) next case A_N0_SK thus ?thesis- by (fastsimp intro: compr_predOrdI)+ by (fastforce intro: compr_predOrdI) qed qed next@@ -268,14 +268,14 @@ proof(sources "Enc \<lbrace>LC ''2'', LN ''sid'' test, s (AV ''A'' test), s (MV ''k'' test)\<rbrace> (SK (s (AV ''B'' test)))") case fake thus ?thesis- by (sources "SK (s (AV ''B'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''B'' test))") (fastforce intro: predOrd_distinct'_trans) next case (B_2_enc_1 tid1) thus ?thesis proof(sources "Enc \<lbrace>LC ''1'', LN ''sid'' test, s (AV ''B'' test), s (MV ''pkNa'' tid1)\<rbrace> (SK (s (AV ''A'' test)))") case fake thus ?thesis- by (sources "SK (s (AV ''A'' test))") (fastsimp intro: predOrd_distinct'_trans)+ by (sources "SK (s (AV ''A'' test))") (fastforce intro: predOrd_distinct'_trans) qed qed next@@ -420,7 +420,7 @@ proof(sources "Enc \<lbrace>LC ''2'', LN ''sid'' test, s (AV ''A'' test), s (MV ''k'' test)\<rbrace> (SK (s (AV ''B'' test)))") case fake thus ?thesis- by (fastsimp dest: A_sec_k event_predOrdI)+ by (fastforce dest: A_sec_k event_predOrdI) next case (B_2_enc_1 tid1) thus ?thesis@@ -432,7 +432,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed qed qed@@ -447,7 +447,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case A_1_enc@@ -480,7 +480,7 @@ thus ?thesis apply - apply(frule lkr_in_reveals_predOrd1)- by (fastsimp dest: allowed_reveals)+ by (fastforce dest: allowed_reveals) qed next case (A_1_enc tid1)
data/isabelle/src/isar-keywords.el view
@@ -1,6 +1,6 @@ ;; ;; Keyword classification tables for Isabelle/Isar.-;; Generated from Pure + Pure-ProofGeneral + HOL + HOLCF + IOA + HOL-Boogie + HOL-Nominal + HOL-SMT + HOL-Statespace.+;; Generated from HOLCF + HOL-BNF + HOL-Boogie + HOL-Library + HOL-Nominal + HOL-Statespace + HOL-SPARK + HOL-TPTP + HOL-Import. ;; *** DO NOT EDIT *** DO NOT EDIT *** DO NOT EDIT *** ;; @@ -8,12 +8,9 @@ '("\\." "\\.\\." "Isabelle\\.command"- "Isar\\.begin_document"- "Isar\\.define_command"- "Isar\\.edit_document"- "Isar\\.end_document" "ML" "ML_command"+ "ML_file" "ML_prf" "ML_val" "ProofGeneral\\.inform_file_processed"@@ -30,21 +27,17 @@ "arities" "assume" "atom_decl"- "atp_info"- "atp_kill"- "atp_messages"- "atp_minimize" "attribute_setup"- "automaton" "ax_specification"- "axclass" "axiomatization" "axioms" "back"+ "bnf_def" "boogie_end" "boogie_open" "boogie_status" "boogie_vc"+ "bundle" "by" "cannot_undo" "case"@@ -54,6 +47,7 @@ "class_deps" "classes" "classrel"+ "codata" "code_abort" "code_class" "code_const"@@ -61,28 +55,26 @@ "code_deps" "code_include" "code_instance"- "code_library"- "code_module" "code_modulename" "code_monad" "code_pred"+ "code_reflect" "code_reserved" "code_thms" "code_type" "coinductive" "coinductive_set" "commit"- "constdefs" "consts"- "consts_code" "context" "corollary" "cpodef"+ "data" "datatype" "declaration" "declare" "def"- "defaultsort"+ "default_sort" "defer" "defer_recdef" "definition"@@ -91,35 +83,45 @@ "display_drafts" "domain" "domain_isomorphism"+ "domaindef" "done" "enable_pr" "end"+ "enriched_type" "equivariance" "exit" "export_code" "extract" "extract_type"- "finalconsts" "finally" "find_consts" "find_theorems"+ "find_unused_assms" "fix"- "fixpat" "fixrec" "from" "full_prf" "fun" "function"- "global" "guess" "have" "header" "help" "hence"- "hide"+ "hide_class"+ "hide_const"+ "hide_fact"+ "hide_type"+ "import_const_map"+ "import_file"+ "import_tptp"+ "import_type_map"+ "include"+ "including" "inductive" "inductive_cases" "inductive_set"+ "inductive_simps" "init_toplevel" "instance" "instantiation"@@ -131,39 +133,42 @@ "lemma" "lemmas" "let"+ "lift_definition" "linear_undo"- "local" "local_setup" "locale"+ "locale_deps" "method_setup" "moreover"- "new_domain" "next" "nitpick" "nitpick_params" "no_notation" "no_syntax" "no_translations"+ "no_type_notation" "nominal_datatype" "nominal_inductive" "nominal_inductive2" "nominal_primrec"- "nonterminals"- "normal_form"+ "nonterminal" "notation" "note"+ "note_cyclic" "note_prefix_closed" "note_unified"- "note_cyclic"+ "notepad" "obtain" "oops" "oracle" "overloading" "parse_ast_translation" "parse_translation"+ "partial_function" "pcpodef" "pr" "prefer"+ "prefix_close" "presume" "pretty_setmargin" "prf"@@ -171,25 +176,35 @@ "print_abbrevs" "print_antiquotations" "print_ast_translation"- "print_atps" "print_attributes" "print_binds"+ "print_bnfs"+ "print_bundles" "print_cases" "print_claset" "print_classes" "print_codeproc" "print_codesetup"+ "print_coercion_maps"+ "print_coercions" "print_commands" "print_configs" "print_context"+ "print_dependencies" "print_drafts" "print_facts" "print_induct_rules"+ "print_inductives" "print_interps" "print_locale" "print_locales" "print_methods" "print_orders"+ "print_quotconsts"+ "print_quotients"+ "print_quotientsQ3"+ "print_quotmaps"+ "print_quotmapsQ3" "print_rules" "print_simpset" "print_statement"@@ -204,8 +219,11 @@ "pwd" "qed" "quickcheck"+ "quickcheck_generator" "quickcheck_params" "quit"+ "quotient_definition"+ "quotient_type" "realizability" "realizers" "recdef"@@ -216,15 +234,28 @@ "remove_thy" "rep_datatype" "role"- "repdef"+ "schematic_corollary"+ "schematic_lemma"+ "schematic_theorem" "sect" "section" "setup"+ "setup_lifting" "show" "simproc_setup" "sledgehammer"+ "sledgehammer_params" "smt_status"+ "solve_direct" "sorry"+ "spark_end"+ "spark_open"+ "spark_open_siv"+ "spark_open_vcg"+ "spark_proof_functions"+ "spark_status"+ "spark_types"+ "spark_vc" "specification" "statespace" "subclass"@@ -234,6 +265,7 @@ "subsubsect" "subsubsection" "syntax"+ "syntax_declaration" "term" "termination" "text"@@ -246,17 +278,18 @@ "thm_deps" "thus" "thy_deps"- "touch_thy" "translations"+ "try"+ "try0" "txt" "txt_raw" "typ"+ "type_invariant"+ "type_notation"+ "type_synonym" "typed_print_translation" "typedecl" "typedef"- "types"- "types_code"- "type_invariant" "ultimately" "undo" "undos_proof"@@ -265,77 +298,66 @@ "use" "use_thy" "using"- "prefix_close" "value" "values" "welcome" "with"+ "wrap_data"+ "write" "{" "}")) (defconst isar-keywords-minor- '("actions"- "advanced"+ '("advanced" "and" "assumes" "attach" "avoids" "begin" "binder"- "compose"+ "checking" "congs" "constrains"- "contains"+ "datatypes"+ "defaults" "defines" "file" "fixes" "for"- "hide_action"+ "functions" "hints" "identifier" "if" "imports" "in"+ "includes" "infix" "infixl" "infixr"- "initially"- "inputs"- "internals" "is"+ "keywords" "lazy" "module_name" "monos" "morphisms"+ "no_dests" "notes" "obtains" "open" "output"- "outputs" "overloaded" "permissive" "pervasive"- "post"- "pre"- "rename"- "restrict"+ "rep_compat" "shows"- "signature"- "states" "structure"- "to"- "transitions"- "transrel" "unchecked"+ "unsafe" "uses" "where")) (defconst isar-keywords-control '("Isabelle\\.command"- "Isar\\.begin_document"- "Isar\\.define_command"- "Isar\\.edit_document"- "Isar\\.end_document" "ProofGeneral\\.inform_file_processed" "ProofGeneral\\.inform_file_retracted" "ProofGeneral\\.kill_proof"@@ -343,64 +365,73 @@ "ProofGeneral\\.restart" "ProofGeneral\\.undo" "cannot_undo"+ "cd"+ "commit"+ "disable_pr"+ "enable_pr" "exit" "init_toplevel" "kill"+ "kill_thy" "linear_undo" "quit"+ "remove_thy" "undo"- "undos_proof"))+ "undos_proof"+ "use_thy")) (defconst isar-keywords-diag '("ML_command" "ML_val" "ProofGeneral\\.pr"- "atp_info"- "atp_kill"- "atp_messages"- "atp_minimize" "boogie_status"- "cd" "class_deps" "code_deps" "code_thms"- "commit"- "disable_pr" "display_drafts"- "enable_pr" "export_code" "find_consts" "find_theorems"+ "find_unused_assms" "full_prf" "header" "help"- "kill_thy"+ "locale_deps" "nitpick"- "normal_form" "pr" "pretty_setmargin" "prf" "print_abbrevs" "print_antiquotations"- "print_atps" "print_attributes" "print_binds"+ "print_bnfs"+ "print_bundles" "print_cases" "print_claset" "print_classes" "print_codeproc" "print_codesetup"+ "print_coercion_maps"+ "print_coercions" "print_commands" "print_configs" "print_context"+ "print_dependencies" "print_drafts" "print_facts" "print_induct_rules"+ "print_inductives" "print_interps" "print_locale" "print_locales" "print_methods" "print_orders"+ "print_quotconsts"+ "print_quotients"+ "print_quotientsQ3"+ "print_quotmaps"+ "print_quotmapsQ3" "print_rules" "print_simpset" "print_statement"@@ -412,17 +443,18 @@ "pwd" "quickcheck" "refute"- "remove_thy" "sledgehammer" "smt_status"+ "solve_direct"+ "spark_status" "term" "thm" "thm_deps" "thy_deps"- "touch_thy"+ "try"+ "try0" "typ" "unused_thms"- "use_thy" "value" "values" "welcome"))@@ -444,128 +476,153 @@ (defconst isar-keywords-theory-decl '("ML"+ "ML_file" "abbreviation" "arities" "atom_decl" "attribute_setup"- "automaton"- "axclass" "axiomatization" "axioms" "boogie_end" "boogie_open"+ "bundle" "class" "classes" "classrel"+ "codata" "code_abort" "code_class" "code_const" "code_datatype" "code_include" "code_instance"- "code_library"- "code_module" "code_modulename" "code_monad"+ "code_reflect" "code_reserved" "code_type" "coinductive" "coinductive_set"- "constdefs" "consts"- "consts_code" "context"+ "data" "datatype" "declaration" "declare"- "defaultsort"+ "default_sort" "defer_recdef" "definition" "defs" "domain" "domain_isomorphism"+ "domaindef" "equivariance" "extract" "extract_type"- "finalconsts"- "fixpat" "fixrec" "fun"- "global"- "hide"+ "hide_class"+ "hide_const"+ "hide_fact"+ "hide_type"+ "import_const_map"+ "import_file"+ "import_tptp"+ "import_type_map" "inductive" "inductive_set" "instantiation" "judgment" "lemmas"- "local" "local_setup" "locale" "method_setup"- "new_domain" "nitpick_params" "no_notation" "no_syntax" "no_translations"+ "no_type_notation" "nominal_datatype"- "nonterminals"+ "nonterminal" "notation"+ "notepad" "oracle" "overloading" "parse_ast_translation" "parse_translation"+ "partial_function" "primrec" "print_ast_translation" "print_translation" "protocol"+ "quickcheck_generator" "quickcheck_params" "realizability" "realizers" "recdef" "record" "refute_params"- "repdef" "role" "setup"+ "setup_lifting" "simproc_setup"+ "sledgehammer_params"+ "spark_end"+ "spark_open"+ "spark_open_siv"+ "spark_open_vcg"+ "spark_proof_functions"+ "spark_types" "statespace" "syntax"+ "syntax_declaration" "text" "text_raw" "theorems" "translations"+ "type_invariant"+ "type_notation"+ "type_synonym" "typed_print_translation" "typedecl"- "types"- "types_code"- "type_invariant" "use")) (defconst isar-keywords-theory-script- '("inductive_cases"))+ '("inductive_cases"+ "inductive_simps")) (defconst isar-keywords-theory-goal '("ax_specification"+ "bnf_def" "boogie_vc" "code_pred" "corollary" "cpodef"+ "enriched_type" "function" "instance" "interpretation" "lemma"+ "lift_definition" "nominal_inductive" "nominal_inductive2" "nominal_primrec" "pcpodef"+ "quotient_definition"+ "quotient_type" "recdef_tc" "rep_datatype"+ "schematic_corollary"+ "schematic_lemma"+ "schematic_theorem"+ "spark_vc" "specification" "subclass" "sublocale" "termination" "theorem"- "typedef"))+ "typedef"+ "wrap_data")) (defconst isar-keywords-qed '("\\."@@ -610,17 +667,19 @@ (defconst isar-keywords-proof-decl '("ML_prf" "also"+ "include"+ "including" "let" "moreover" "note"+ "note_cyclic" "note_prefix_closed" "note_unified"- "note_cyclic" "txt" "txt_raw" "unfolding" "using"- "prefix_close"))+ "write")) (defconst isar-keywords-proof-asm '("assume"
interactive-only-src/Paths_scyther_proof.hs view
@@ -12,7 +12,7 @@ version :: Version-version = Version {versionBranch = [0,5,0,0], versionTags = []}+version = Version {versionBranch = [0,6,0,0], versionTags = []} bindir, libdir, datadir, libexecdir :: FilePath bindir = "."
scyther-proof.cabal view
@@ -1,25 +1,27 @@ build-type: Simple name: scyther-proof-version: 0.5.0.0+version: 0.6.0.0 license: GPL license-file: LICENSE category: Security, Theorem Provers-author: Simon Meier <simon.meier@inf.ethz.ch>-maintainer: Simon Meier <simon.meier@inf.ethz.ch>-copyright: Simon Meier, ETH Zurich, 2009-2011-synopsis: Automatic generation of Isabelle/HOL correctness proofs for security protocols.-description:- scyther-proof is a security protocol verification tool+author: Simon Meier <iridcode@gmail.com>, + Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>+maintainer: Simon Meier <iridcode@gmail.com>+copyright: Simon Meier, Andreas Lochbihler, ETH Zurich, 2009-2013++synopsis: Automatic generation of Isabelle/HOL correctness proofs + for security protocols.++description: scyther-proof is a security protocol verification tool based on an algorithm similar to the Scyther tool developed by Cas Cremers (<http://people.inf.ethz.ch/cremersc/scyther/index.html>). The theory underlying scyther-proof is described in the- paper \"Strong Invariants for the Efficient Construction of- Machine-Checked Protocol Security Proofs\" by Meier,- Cremers, and Basin available from- <http://people.inf.ethz.ch/meiersi/publications/index.html>--homepage: http://www.infsec.ethz.ch/people/meiersi/+ 2013 Journal of Computer Security paper + \"Efficient Construction of + Machine-Checked Protocol Security Proofs\" + by Meier, Cremers, and Basin available from+ <https://github.com/meiersi/scyther-proof/tree/master/publications>. stability: Beta cabal-version: >= 1.8 data-dir: data@@ -81,10 +83,9 @@ isabelle/AUTHORS isabelle/document/root.tex- isabelle/IsaMakefile isabelle/Makefile isabelle/README- isabelle/ROOT.ML+ isabelle/ROOT isabelle/src/isar-keywords.el isabelle/src/*.thy isabelle/src/ESPLogic/*.thy
src/Main.hs view
@@ -24,7 +24,6 @@ import System.Directory import System.Isabelle import System.Info-import System.Timeout import System.Timing import System.Environment import System.Process@@ -63,7 +62,7 @@ [ programName , " " , showVersion version- , ", (C) Simon Meier, ETH Zurich, 2009-2012"+ , ", (C) Simon Meier, Andreas Lochbihler, ETH Zurich, 2009-2013" ] -- | Version string with HTML markup.@@ -73,8 +72,9 @@ , " " , showVersion version , ", © "- , link "http://people.inf.ethz.ch/meiersi" "Simon Meier"- , ", ETH Zurich, 2009-2012"+ , link "https://github.com/meiersi/scyther-proof" "Simon Meier"+ , link "http://github.com/meiersi" "Andreas Lochbihler"+ , ", ETH Zurich, 2009-2013" ] where link href name =@@ -86,8 +86,10 @@ -- | ESPL Theory directory. esplTheoryDir :: IO String-esplTheoryDir = getDataFileName "isabelle"-+esplTheoryDir = do+ currDir <- getCurrentDirectory+ esplDir <- getDataFileName "isabelle"+ return (if isAbsolute esplDir then esplDir else currDir </> esplDir) ------------------------------------------------------------------------------ -- Argument parsing helpers@@ -149,8 +151,8 @@ , " The '--html' flag requires the 'dot' tool from GraphViz available at:" , " " ++ "http://www.graphviz.org/" , " "- , " The '--isabelle' flag requires the 'Isabelle-2009-1' release of Isabelle/HOL:"- , " " ++ "http://isabelle.in.tum.de/website-Isabelle2009-1/download_x86-linux.html"+ , " The '--isabelle' flag requires the 'Isabelle-2013' release of Isabelle/HOL:"+ , " " ++ "http://isabelle.in.tum.de/website-Isabelle2013/index.html" , "" , " Check the '" ++ readmePath ++ "' file for instructions on how to load the generated theory files in Isabelle's interactive mode." ]@@ -196,15 +198,9 @@ "Number of parellel threads to be used for proof checking. \ \(The default is to use as many threads as there are cores.)" - , flagNone ["rebuild-logic"] (addEmpty "rebuildLogic")- "Rebuild the ESPL logic image (required after updating its source)"- , flagNone ["no-generation"] (addEmpty "noGeneration") "Do not generate the theory files, but check the results using Isabelle." - , flagOpt "0" ["timeout"] (upd "timeout") "SECONDS"- "Timeout in seconds for proof generation and checking."- , flagOpt "" ["hide-prefix"] (upd "hidePrefix") "VALUE" "Hide non-referenced properties with this prefix (default=auto)." @@ -297,12 +293,11 @@ -> MVar (T.Table String) -- ^ Empty MVar for building the report. -> IO () translateWorker as templateFile reportVar- | null inFiles && not rebuildLogic = errHelpExit "no input iles given"- | otherwise = do+ | null inFiles = errHelpExit "no input files given"+ | otherwise = do -- check required tools when (not dryRun && html) (ensureGraphVizDot dotTool)- when (rebuildLogic || (not dryRun && isabelle))- (ensureIsabelleESPL rebuildLogic isabelleTool)+ when (not dryRun && isabelle) (ensureIsabelleESPL isabelleTool) -- translate all input files and ensure report is written with a special -- interrupted marker when an exception like Ctrl-C happened@@ -315,7 +310,6 @@ where -- Tool paths and flags ------------------------ rebuildLogic = argExists "rebuildLogic" as isabelleTool = fromMaybe "isabelle" $ findArg "isabelle" as dotTool = fromMaybe "dot" $ findArg "html" as @@ -370,28 +364,6 @@ | argExists "composeParallel" as = composeParallel | otherwise = id - -- timeout handling- -------------------- maxTime :: Maybe Int- maxTime = findCheckedArg (0 <) "timeout" as-- execWithTimeout :: IO a -> IO a- execWithTimeout io = case maxTime of- Nothing -> io- Just t -> do- res <- timeout (t * 1000000) io- case res of- Nothing -> do- updateReport (T.appendCell $ "timeout: "++show maxTime++"s")- throw CustomTimeout- Just x -> return x-- ignoringTimeout :: IO () -> IO ()- ignoringTimeout io = E.catch io handler- where- handler :: CustomTimeout -> IO ()- handler _ = return ()- -- progress output for batch mode --------------------------------- putInfo msg = unless dryRun (putStr msg >> hFlush stdout)@@ -467,6 +439,7 @@ cmdLine <- getCommandLine time <- getCurrentTime cpu <- getCpuModel+ esplSrc <- esplTheoryDir theoryToHtml $ GenerationInput { giHeader = "Generated by " ++ htmlVersionStr , giTime = time@@ -483,7 +456,7 @@ , giDotTool = dotTool , giIsabelle = if isabelle- then Just $ checkTheoryFile isabelleTool isabelleThreads 0 "ESPL"+ then Just $ checkTheoryFile isabelleTool isabelleThreads esplSrc else Nothing } @@ -615,7 +588,7 @@ writeThyFile outPath thy = do if not noGeneration then do- tGen <- execWithTimeout . timed_ . writeFile outPath .+ tGen <- timed_ . writeFile outPath . thyToString $ adaptTheoryName outPath thy let prfSize = theoryProofSize thy reportNumber "Generation Time" tGen@@ -628,9 +601,8 @@ sequence_ . replicate 3 $ reportString "-" "--n" if isabelle then do- -- let isabelleTimeout = maxTime * 10^6 -- in microseconds- let isabelleTimeout = 0 -- because timeout construction for Isabelle is buggy currently- ((_, result), tCheck) <- timed $ checkTheoryFile isabelleTool isabelleThreads isabelleTimeout "ESPL" outPath+ esplSrc <- esplTheoryDir+ (result, tCheck) <- timed $ checkTheoryFile isabelleTool isabelleThreads esplSrc outPath reportNumber "Checking Time" tCheck case result of Nothing -> do@@ -638,7 +610,7 @@ reportString "Isabelle Status" "checked" reportString "Isabelle Message" "" Just msg -> do- mapM_ (putInfo . ('\t':)) ["CHECK FAILED", show tCheck, show msg]+ mapM_ (putInfo . ('\t':)) ["CHECK FAILED", show tCheck, '\n' : msg] reportString "Isabelle Status" "check failed" reportString "Isabelle Message" (show msg) else@@ -664,7 +636,7 @@ outPath = mkOutPath inFile translateOneFile :: FilePath -> IO ()- translateOneFile inFile = ignoringTimeout (readThy inFile >>= processThy inFile)+ translateOneFile inFile = readThy inFile >>= processThy inFile ------------------------------------------------------------------------------@@ -774,27 +746,24 @@ -- | Ensure a suitable version of the Isabelle/HOL 'isabelle' tool is installed -- and the 'ESPL' head is compiled.-ensureIsabelleESPL :: Bool -- ^ True if logic must rebuilt anyways.- -> FilePath -- ^ Path to the 'isabelle' tool.+ensureIsabelleESPL :: FilePath -- ^ Path to the 'isabelle' tool. -> IO ()-ensureIsabelleESPL rebuild isabelle = do+ensureIsabelleESPL isabelle = do putStrLn $ "checking suitability of Isabelle tool: '" ++ isabelle ++ "'" _ <- testProcess checkVersion " version: " isabelle ["version"] "" success <- testProcess checkLogics " installed logics: " isabelle ["findlogics"] ""- if success && not rebuild- then putStrLn " (use the flag --rebuild-logic if your image of ESPL is outdated)"- else buildESPL+ unless success buildESPL putStrLn "" where checkVersion out _- | "Isabelle2009-1" `isInfixOf` out = Right $ init out ++ ". OK."+ | "Isabelle2013" `isInfixOf` out = Right $ init out ++ ". OK." | otherwise = Left $ unlines $ [ "WARNING:" , ""- , " " ++ programName ++ " requires Isabelle2009-1."+ , " " ++ programName ++ " requires Isabelle2013." , " Proof checking is likely not to work."- , " Please download Isabelle2009-1 from:"- , " http://isabelle.in.tum.de/website-Isabelle2009-1/download_x86-linux.html"+ , " Please download Isabelle2013 from:"+ , " http://isabelle.in.tum.de/website-Isabelle2013/index.html" ] checkLogics out _@@ -807,9 +776,9 @@ putStrLn "Attempting to build ESPL logic (this may take several minutes):" theoryDir <- esplTheoryDir let isamake args =- runProcess isabelle ("make" :args) (Just theoryDir) Nothing Nothing Nothing Nothing+ runProcess isabelle ("build" : "-d" : theoryDir : args) (Just theoryDir) Nothing Nothing Nothing Nothing >>= waitForProcess- exitCode <- isamake ["clean"] >> isamake []+ exitCode <- isamake ["-b", "ESPL"] case exitCode of ExitSuccess -> putStrLn "Sucess! :-)\n---" ExitFailure code -> putStrLn $ unlines
src/Scyther/Theory/Html.hs view
@@ -74,10 +74,9 @@ , giDotTool :: String -- ^ 'dot' tool to use. , giCmdLine :: String -- ^ The command line that was used in this call to -- scyther-proof.- , giIsabelle :: Maybe (FilePath -> IO (IO String, Maybe String))+ , giIsabelle :: Maybe (FilePath -> IO (Maybe String)) -- ^ A checking function calling isabelle with- -- the right parameters and returning an IO function- -- for retrieving the logfile contents and an error+ -- the right parameters which return an error -- message in case the check didn't succeed. } @@ -85,7 +84,6 @@ data PathInfo = PathInfo { inputFileCopy :: FilePath -- ^ Path of input file copy. , proofScriptFile :: FilePath -- ^ Path of generated Isabelle proof script.- , logFileCopy :: FilePath -- ^ Path of the copy of the logFile , outDir :: FilePath -- ^ Output directory. , imageDir :: FilePath -- ^ Relative directory for graphs. , filesDir :: FilePath -- ^ Relative directory for input and output files.@@ -99,7 +97,6 @@ { inputFileCopy = filesDir info </> takeFileName (giInputFile input) , proofScriptFile = filesDir info </> addExtension (takeBaseName (giInputFile input) ++ "_cert_auto") "thy"- , logFileCopy = filesDir info </> "logfile" , outDir = giOutDir input , imageDir = "img" , filesDir = "files"@@ -119,8 +116,8 @@ -- theories for exporting as JSON. jsGenerationInfo :: GenerationInput -> NominalDiffTime -- ^ Proof script generation time.- -> Maybe (Bool, NominalDiffTime, FilePath) - -- ^ Proof checking time and relative logfile path.+ -> Maybe (Bool, NominalDiffTime) + -- ^ Proof checking time. -> JSObject JSValue jsGenerationInfo input genTime optCheckInfo = toJSObject $ [ ("header", showJSON . toJSString $ giHeader input)@@ -138,10 +135,8 @@ checkInfo Nothing = [ ("certificateStatus", showJSON . toJSString $ genTimeString) ]- checkInfo (Just (success, checkTime, logFile)) =- [ ( "certificateStatus", showJSON . toJSString $ genTimeString ++ status)- , ( "logFile", showJSON (toJSString "logfile", toJSString logFile))- ]+ checkInfo (Just (success, checkTime)) =+ [ ( "certificateStatus", showJSON . toJSString $ genTimeString ++ status) ] where status | success = ", successfully checked in " ++ show checkTime | otherwise = ", CHECK FAILED after " ++ show checkTime@@ -164,13 +159,11 @@ Nothing -> return Nothing Just machineCheck -> do putStr " checking proof script: " >> hFlush stdout- ((logFileContents, optErrMsg), checkTime) <- timed $ + (optErrMsg, checkTime) <- timed $ machineCheck (mkAbsolute paths $ proofScriptFile paths) putStrLn $ show checkTime -- write log file copy- contents <- logFileContents- writeAbsolute (logFileCopy paths) contents- return $ Just (isNothing optErrMsg, checkTime, logFileCopy paths)+ return $ Just (isNothing optErrMsg, checkTime) -- json output let thyJSON = mkThyJSON (jsGenerationInfo input genTime optCheckInfo) writeAbsolute "theory.js"
src/Scyther/Theory/Pretty.hs view
@@ -343,8 +343,8 @@ -- Isabelle tactic. isaTactic :: TrivReason -> String isaTactic TrivContradictoryPremises = "((clarsimp, order?) | order)"-isaTactic (TrivLongTermKeySecrecy _) = "(fastsimp dest!: ltk_secrecy)"-isaTactic TrivPremisesImplyConclusion = "(fastsimp intro: event_predOrdI split: if_splits)"+isaTactic (TrivLongTermKeySecrecy _) = "(fastforce dest!: ltk_secrecy)"+isaTactic TrivPremisesImplyConclusion = "(fastforce intro: event_predOrdI split: if_splits)" -- | Isabelle proof of long-term key secrecy. isaLongTermKeySecrecyProof :: Protocol -> Doc@@ -460,7 +460,7 @@ prettyForwardContradiction thRef =- kwBy <-> text "(fastsimp dest:" <-> thRef <-> text "intro: event_predOrdI)"+ kwBy <-> text "(fastforce dest:" <-> thRef <-> text "intro: event_predOrdI)" prettyForwardResolution thRef thSe mapping | isJust . destTypingFormula . seConcl $ thSe = emptyDoc | otherwise = do@@ -491,7 +491,7 @@ | any (`isPrefixOf` name) ["ik0", "fake"] || null newVars = text name | otherwise = parens $ text name <-> hsep (map ppNewVar newVars) prettyChainRuleQED _ trivCases- | null tactics = kwQED <-> text "(insert facts, fastsimp+)?" -- be conservative+ | null tactics = kwQED <-> text "(insert facts, fastforce+)?" -- be conservative | otherwise = kwQED <-> text "(insert facts, (" <> hsep (intersperse (text "|") tactics) <> text ")+)?" where@@ -535,7 +535,7 @@ ) $-$ (text "thus ?thesis proof(cases rule: Kbd_cases)") - prettySplitEqQed = text "qed (fastsimp+)?"+ prettySplitEqQed = text "qed (fastforce+)?" -- theory output prettyComment comment = text "(*" <-> text comment <-> text "*)"@@ -601,7 +601,7 @@ pure body $-$ text "" $-$ text "end" where- imports = ["../ESPLogic"]+ imports = ["ESPLogic"] -- | Pretty-print an injectivity sequent. Works only for two-party@@ -614,7 +614,7 @@ , nest 2 (sep [text "prems =", nest 2 $ ppPrems <> semi]) , nest 2 (sep [text "concs =", nest 2 $ ppConcs]) , text "in" <->- isaExists conf <> text "f. inj_on f prems" <-> isaAnd conf <->+ isaExists conf <> text "f. inj_on f (Collect prems)" <-> isaAnd conf <-> parens ( isaForall conf <> text "i. prems i" <-> isaImplies conf <-> text "concs i (f i)" ) ]
src/System/Isabelle.hs view
@@ -2,57 +2,20 @@ -- -- Requirements: ----- 1. A working installation of Isabelle2009-1 (http://isabelle.in.tum.de/)+-- 1. A working installation of Isabelle2013 (http://isabelle.in.tum.de/) -- 2. The \'isabelle\' command must be on the PATH. -- module System.Isabelle ( checkTheoryFile ) where -import Data.Maybe import Data.List import System.FilePath import System.Directory import System.Process import System.IO--import Control.Concurrent-import Control.Monad-import Control.Exception----------------------------------------------------------------------------------- Utilities: TODO MOVE INTO GENERAL FILE----------------------------------------------------------------------------------- | Create and use a temporary file ensuring that it is closed if the--- computation fails.------ See 'openTempFile' for more information on the parameters.-withTempFile :: FilePath -> String -> ((FilePath, Handle) -> IO a) -> IO (a, FilePath)-withTempFile dir nameTemplate io = - bracket (openTempFile dir nameTemplate) (hClose . snd) - (\args@(file,_) -> do{ x <- io args; return (x, file) })---- | Like 'withTempFile' buth without returning the results of the inner--- computation.-withTempFile_ :: FilePath -> String -> ((FilePath, Handle) -> IO a) -> IO FilePath-withTempFile_ dir nameTemplate io = snd `liftM` withTempFile dir nameTemplate io---- | Waits the given amount of microseconds before trying to terminate the--- process using 'terminateProcess'.-waitForProcessTimeout :: Int -> ProcessHandle -> IO Bool-waitForProcessTimeout maxTime hProc- | maxTime <= 0 = do _<- waitForProcess hProc; return False- | otherwise = do- timeout <- newMVar False- _ <- forkIO $ do- threadDelay maxTime- modifyMVar_ timeout (return . const True)- terminateProcess hProc- _ <- waitForProcess hProc- readMVar timeout- +import System.Exit ------------------------------------------------------------------------------ -- Isabelle commands@@ -61,51 +24,31 @@ -- | Use Isabelle to check the correctness of a theory file. checkTheoryFile :: FilePath -- ^ Path to 'isabelle' binary. -> Maybe Int -- ^ Number of parallel thread to use while checking.- -> Int -- ^ Maximal available time in micro-seconds- -> String -- ^ Logic Image to use+ -> FilePath -- ^ Path to ESPL sources -> FilePath -- ^ Path to file to be checked- -> IO (IO String, Maybe String)+ -> IO (Maybe String) -- ^ If the check went through, log-file content only, otherwise -- also an error message.-checkTheoryFile isabelleTool threads maxTime logic thyFile = do+checkTheoryFile isabelleTool threads esplSrc thyFile = do let thyName = takeBaseName thyFile- rootName = "ROOT-" ++ thyName ++ ".ML"+ rootName = "ROOT" sessionName = "scyther-proof-" ++ thyName- -- create ROOT.ML file- tmpDir <- getTemporaryDirectory- rootFile <- withTempFile_ tmpDir rootName - (\(_, hRootFile) -> - hPutStrLn hRootFile $ "use_thy \"" ++ dropExtension thyFile ++ "\""- )+ + -- setup temporary directory+ tmpDir <- createTempDirectory+ copyFile thyFile (tmpDir </> addExtension thyName "thy")+ writeFile (tmpDir </> rootName) ("session \"" ++ sessionName ++ "\" = ESPL + theories \"" ++ thyName ++ "\"") -- call "isabelle usedir"- finally - (do let cmd = isabelleTool ++ - " usedir -f " ++ rootFile ++ - " -s " ++ sessionName ++ - " -M " ++ maybe "0" show threads ++- " " ++ logic ++ " ."- (_, _, hErr, hProc) <- runInteractiveCommand cmd- isaOutVar <- newEmptyMVar- _ <-forkIO $ redirect hErr isaOutVar- timeout <- waitForProcessTimeout maxTime hProc- isaOut <- takeMVar isaOutVar- if timeout- then do return (return $ isaOut ++ "Interrupted due to timeout!"- , Just $ "timeout: " ++ - show ((fromIntegral maxTime / 10E6)::Double) ++ "s")- else do return $ parseIsaOutput sessionName isaOut- )- (do removeFile rootFile)+ (code, out, _err) <- readProcessWithExitCode isabelleTool+ ["build", "-d", esplSrc, "-D", tmpDir, "-j", maybe "0" show threads]+ ""+ if code == ExitSuccess+ then do+ removeDirectoryRecursive tmpDir+ return Nothing+ else+ return (Just (errMsg out)) where- -- | Redirect the contents of a the given handle into the message variable.- redirect hIn mvar = hGetContents hIn >>= putMVar mvar-- -- | extract the log file name from the isabelle output- logFileName str = fromMaybe "no log file" $ do- let logIndicator = "(see also "- line <- find (logIndicator `isPrefixOf`) (lines str) - init `liftM` stripPrefix logIndicator line- -- | Extract the error message from the isabelle output errMsg str = case break ("***" `isPrefixOf`) (lines str) of (_,[]) -> str@@ -113,9 +56,12 @@ (_,[]) -> unlines (first : ls) (ls',(fin:_)) -> unlines (first : ls'++[fin]) - -- | Parse the Isabelle output.- parseIsaOutput sessionName str- | ("Finished "++logic++"-"++sessionName) `isInfixOf` str = (return str, Nothing)- | otherwise = (readFile (logFileName str), Just (errMsg str))-- + createTempDirectory :: IO FilePath+ createTempDirectory = do+ tmpBase <- getTemporaryDirectory+ -- hack to create a unique temporary directory+ (tmpDir, handle) <- openTempFile tmpBase "scyther-proof_tmp"+ hClose handle+ removeFile tmpDir+ createDirectory tmpDir+ return tmpDir