diff --git a/BasicEAC.spthy b/BasicEAC.spthy index 53250d1f6acf99f70d6cf038b9aefbff44f9b03a..6ca7c5049d1cf4cdc75c30280740c815b494f673 100644 --- a/BasicEAC.spthy +++ b/BasicEAC.spthy @@ -153,9 +153,9 @@ let kEnc = kdf_enc(k, r2) tag = mac(kMac, pkTe) msg6 = <r2, tag, 'CA_RESPONSE', '6', 'c'> - sid = <pkTe, pkC, id_c, r2> + sid = <pkTe, 'g'^~skC, id_c, r2> in - [ In(msg5), CAInitC(<$C, iid>, certT, pkTe, id_c, r1, r2), !LtkDH($C, ~skC), !PkDH($C, pkC) ] + [ In(msg5), CAInitC(<$C, iid>, certT, pkTe, id_c, r1, r2), !LtkDH($C, ~skC) ] --[ Eq(pkTe_t, pkTe), Completed(<kEnc, kMac>, sid, $C, 'chip', cert_id(certT)) ]-> [ Out(msg6), CAFinishC($C, cert_id(certT), kEnc), Out(iid) ] @@ -201,41 +201,81 @@ lemma two_session_exist: exists-trace " */ -// Authentication +// Agreement +lemma weak_agreement_C: + "All k sid C T #i #t . + Completed(k, sid, C, 'chip', T) @ #i + & Finished(sid) @ #t + ==> (Ex k2 sid2 #j . + Completed(k2, sid2, T, 'terminal', C) @ #j) + | (Ex #k . Corrupted(C) @ #k) + | (Ex #k . Corrupted(T) @ #k) + " + +lemma weak_agreement_T: + "All k sid C T #i #t . + Completed(k, sid, T, 'terminal', C) @ #i + & Finished(sid) @ #t + ==> (Ex k2 sid2 #j . + Completed(k2, sid2, C, 'chip', T) @ #j) + | (Ex #k . Corrupted(C) @ #k) + | (Ex #k . Corrupted(T) @ #k) + " + +lemma agreement_C: + "All k sid C T #i #t . + Completed(k, sid, C, 'chip', T) @ #i + & Finished(sid) @ #t + ==> (Ex #j . + Completed(k, sid, T, 'terminal', C) @ #j) + | (Ex #k . Corrupted(C) @ #k) + | (Ex #k . Corrupted(T) @ #k) + " + +lemma agreement_T: + "All k sid C T #i #t . + Completed(k, sid, T, 'terminal', C) @ #i + & Finished(sid) @ #t + ==> (Ex #j . + Completed(k, sid, C, 'chip', T) @ #j) + | (Ex #k . Corrupted(C) @ #k) + | (Ex #k . Corrupted(T) @ #k) + " + lemma aliveness: "All k sid A role B #i #t . Completed(k, sid, A, role, B) @ #i & Finished(sid) @ #t - & not(Ex #k . Corrupted(B) @ #k) ==> (Ex k2 sid2 role2 C #j . Completed(k2, sid2, B, role2, C) @ #j) + | (Ex #k . Corrupted(B) @ #k) " lemma session_uniqueness: "All A B k sid sid2 role #i #j . Completed(k, sid, A, role, B) @ #i & Completed(k, sid2, A, role, B) @ #j - ==> (#i = #j) + ==> (#i = #j) & (sid = sid2) " +// Sole purpose of static key of T is authentication +// The final keys k/k2 are only derived from pkC/skC, pkTe/skTe and r2 lemma consistency: "All C T k k2 sid #i #j . Completed(k, sid, C, 'chip', T) @ #i & Completed(k2, sid, T, 'terminal', C) @ #j - & not(Ex #k . Corrupted(C) @ #k) - & not(Ex #k . Corrupted(T) @ #k) ==> (k=k2) + | (Ex #m . Corrupted(C) @ #m) " // Key secrecy -lemma key_secrecy[reuse]: - "All C T role k sid #j . - Completed(k, sid, C, role, T) @ #j - & not(Ex #m . Corrupted(T) @ #m) - & not(Ex #m . Corrupted(C) @ #m) - & not(Ex iid #m . Revealed(<T, iid>) @ #m) - & not(Ex iid #m . Revealed(<C, iid>) @ #m) +lemma key_secrecy: + "All C T k sid #i #j . + Completed(k, sid, C, 'chip', T) @ #i + & Completed(k, sid, T, 'terminal', C) @ #j ==> not(Ex #m . K(k) @ #m) + | (Ex iid #m . Revealed(<T, iid>) @ #m) + | (Ex #m . Corrupted(C) @ #m) " end diff --git a/results/cpu.45369362 b/results/cpu.45369362 new file mode 100644 index 0000000000000000000000000000000000000000..dfe137bca96ce750fa4d6cb480d33a24d8086aa9 --- /dev/null +++ b/results/cpu.45369362 @@ -0,0 +1,104 @@ +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q +model name : Intel(R) Xeon(R) Platinum 8470Q diff --git a/results/eac_tamarin.out.45369362 b/results/eac_tamarin.out.45369362 new file mode 100644 index 0000000000000000000000000000000000000000..a19df44e0dc9711abf86cb05e89c4387a056b2e0 --- /dev/null +++ b/results/eac_tamarin.out.45369362 @@ -0,0 +1,6750 @@ +maude tool: 'maude' + checking version: 3.3.1. OK. + checking installation: OK. +theory BasicEAC begin + +// Function signature and definition of the equational theory E + +builtins: diffie-hellman +functions: ca_sk/0[private,destructor], cert/3, cert_id/1, cert_pk/1, + cert_sig/1, fst/1, kdf_enc/2, kdf_mac/2, mac/2, pair/2, pk/1, sign/2, + snd/1, true/0, verify/3 +equations: + cert_id(cert(pk, s, id)) = id, + cert_pk(cert(pk, s, id)) = pk, + cert_sig(cert(pk, s, id)) = s, + fst(<x.1, x.2>) = x.1, + snd(<x.1, x.2>) = x.2, + verify(sign(x.1, x.2), x.1, pk(x.2)) = true + + + + + + + + + +macros: + verify_cert( cert ) = verify(cert_sig(cert),pair(cert_pk(cert),cert_id(cert)),pk(ca_sk)) + +rule (modulo E) Publish_ca_pk: + [ ] --> [ Out( pk(ca_sk) ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) Generate_static_ltk: + [ Fr( ~ltk ) ] + --> + [ !Pk( $A, pk(~ltk) ), !Ltk( $A, ~ltk ), Out( pk(~ltk) ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) Generate_static_dh: + [ Fr( ~ltk ) ] + --> + [ !PkDH( $A, 'g'^~ltk ), !LtkDH( $A, ~ltk ), Out( 'g'^~ltk ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) CA_Sign_ltk: + [ !Pk( A, pk ) ] + --> + [ + !Cert( A, cert(pk, sign(<pk, A>, ca_sk), A) ), + Out( cert(pk, sign(<pk, A>, ca_sk), A) ) + ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) CA_Sign_dh: + [ !PkDH( A, pk ) ] + --> + [ + !CertDH( A, cert(pk, sign(<pk, A>, ca_sk), A) ), + Out( cert(pk, sign(<pk, A>, ca_sk), A) ) + ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) Reveal_ltk: + [ !Ltk( $A, ltk ) ] --[ Corrupted( $A ) ]-> [ Out( ltk ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) Reveal_dh: + [ !LtkDH( $A, ltk ) ] --[ Corrupted( $A ) ]-> [ Out( ltk ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) Reveal_session: + [ !SessionReveal( uid, k ) ] --[ Revealed( uid ) ]-> [ Out( k ) ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) TA_INIT_T: + [ !Cert( $T, certT ), Fr( ~skTe ), Fr( ~iid ) ] + --> + [ + Out( <certT, 'g'^~skTe, 'TA_INIT', '1', 't'> ), + TAInitT( <$T, ~iid>, ~skTe ) + ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) TA_CHALLENGE_C: + [ + In( <certT, pkTe, 'TA_INIT', '1', 't'> ), Fr( ~r1 ), Fr( ~id_c ), + Fr( ~iid ) + ] + --[ Eq( verify_cert(certT), true ) ]-> + [ + Out( <~id_c, ~r1, 'TA_CHALLENGE', '2', 'c'> ), + TAChallengeC( <$C, ~iid>, certT, pkTe, ~id_c, ~r1 ) + ] + + /* + rule (modulo AC) TA_CHALLENGE_C: + [ + In( <certT, pkTe, 'TA_INIT', '1', 't'> ), Fr( ~r1 ), Fr( ~id_c ), + Fr( ~iid ) + ] + --[ Eq( z, true ) ]-> + [ + Out( <~id_c, ~r1, 'TA_CHALLENGE', '2', 'c'> ), + TAChallengeC( <$C, ~iid>, certT, pkTe, ~id_c, ~r1 ) + ] + variants (modulo AC) + 1. certT = certT.15 + z = verify(cert_sig(certT.15), + <cert_pk(certT.15), cert_id(certT.15)>, pk(ca_sk)) + + 2. certT = cert(x.16, sign(<x.16, x.17>, ca_sk), x.17) + z = true + + 3. certT = cert(x.17, x.18, x.19) + z = verify(x.18, <x.17, x.19>, pk(ca_sk)) + */ + +rule (modulo E) TA_RESPONSE_T: + [ + In( <id_c, r1, 'TA_CHALLENGE', '2', 'c'> ), TAInitT( <$T, iid>, skTe ), + !Ltk( $T, ~skT ) + ] + --> + [ + Out( <sign(<id_c, r1, 'g'^skTe>, ~skT), 'TA_RESPONSE', '3', 't'> ), + TAResponseT( <$T, iid>, skTe, id_c ) + ] + + /* + rule (modulo AC) TA_RESPONSE_T: + [ + In( <id_c, r1, 'TA_CHALLENGE', '2', 'c'> ), TAInitT( <$T, iid>, skTe ), + !Ltk( $T, ~skT ) + ] + --> + [ + Out( <sign(<id_c, r1, z>, ~skT), 'TA_RESPONSE', '3', 't'> ), + TAResponseT( <$T, iid>, skTe, id_c ) + ] + variants (modulo AC) + 1. skTe = skTe.12 + z = 'g'^skTe.12 + + 2. skTe = one + z = 'g' + */ + +rule (modulo E) TA_COMPLETE_C: + [ + In( <s, 'TA_RESPONSE', '3', 't'> ), + TAChallengeC( <$C, iid>, certT, pkTe, id_c, r1 ) + ] + --[ Eq( verify(s, <id_c, r1, pkTe>, cert_pk(certT)), true ) ]-> + [ TACompleteC( <$C, iid>, certT, pkTe, id_c, r1 ) ] + + /* + rule (modulo AC) TA_COMPLETE_C: + [ + In( <s, 'TA_RESPONSE', '3', 't'> ), + TAChallengeC( <$C, iid>, certT, pkTe, id_c, r1 ) + ] + --[ Eq( z, true ) ]-> + [ TACompleteC( <$C, iid>, certT, pkTe, id_c, r1 ) ] + variants (modulo AC) + 1. certT = certT.18 + id_c = id_c.19 + pkTe = pkTe.21 + r1 = r1.22 + s = s.23 + z = verify(s.23, <id_c.19, r1.22, pkTe.21>, cert_pk(certT.18)) + + 2. certT = cert(x.60, x.61, x.62) + id_c = id_c.33 + pkTe = pkTe.35 + r1 = r1.36 + s = s.37 + z = verify(s.37, <id_c.33, r1.36, pkTe.35>, x.60) + + 3. certT = cert(pk(x.60), x.61, x.62) + id_c = id_c.33 + pkTe = pkTe.35 + r1 = r1.36 + s = sign(<id_c.33, r1.36, pkTe.35>, x.60) + z = true + */ + +rule (modulo E) CA_INIT_C: + [ + !CertDH( $C, certC ), Fr( ~r2 ), + TACompleteC( <$C, iid>, certT, pkTe, id_c, r1 ) + ] + --> + [ + Out( <certC, 'CA_INIT', '4', 'c'> ), + CAInitC( <$C, iid>, certT, pkTe, id_c, r1, ~r2 ) + ] + + /* has exactly the trivial AC variant */ + +rule (modulo E) CA_INIT_T: + [ + In( <certC, 'CA_INIT', '4', 'c'> ), TAResponseT( <$T, iid>, skTe, id_c ) + ] + --[ Eq( verify_cert(certC), true ) ]-> + [ + Out( <'g'^skTe, 'CA_COMMIT', '5', 't'> ), + CAInitT( <$T, iid>, skTe, id_c, certC ) + ] + + /* + rule (modulo AC) CA_INIT_T: + [ + In( <certC, 'CA_INIT', '4', 'c'> ), TAResponseT( <$T, iid>, skTe, id_c ) + ] + --[ Eq( z.1, true ) ]-> + [ + Out( <z, 'CA_COMMIT', '5', 't'> ), + CAInitT( <$T, iid>, skTe, id_c, certC ) + ] + variants (modulo AC) + 1. certC = certC.15 + skTe = one + z = 'g' + z.1 = verify(cert_sig(certC.15), + <cert_pk(certC.15), cert_id(certC.15)>, pk(ca_sk)) + + 2. certC = certC.18 + skTe = skTe.21 + z = 'g'^skTe.21 + z.1 = verify(cert_sig(certC.18), + <cert_pk(certC.18), cert_id(certC.18)>, pk(ca_sk)) + + 3. certC = cert(x.16, sign(<x.16, x.17>, ca_sk), x.17) + skTe = one + z = 'g' + z.1 = true + + 4. certC = cert(x.17, x.18, x.19) + skTe = one + z = 'g' + z.1 = verify(x.18, <x.17, x.19>, pk(ca_sk)) + + 5. certC = cert(x.115, sign(<x.115, x.116>, ca_sk), x.116) + skTe = skTe.61 + z = 'g'^skTe.61 + z.1 = true + + 6. certC = cert(x.116, x.117, x.118) + skTe = skTe.62 + z = 'g'^skTe.62 + z.1 = verify(x.117, <x.116, x.118>, pk(ca_sk)) + */ + +rule (modulo E) CA_FINISH_C: + [ + In( <pkTe_t, 'CA_COMMIT', '5', 't'> ), + CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ), !LtkDH( $C, ~skC ) + ] + --[ + Eq( pkTe_t, pkTe ), + Completed( <kdf_enc(pkTe^~skC, r2), kdf_mac(pkTe^~skC, r2)>, + <pkTe, 'g'^~skC, id_c, r2>, $C, 'chip', cert_id(certT) + ) + ]-> + [ + Out( <r2, mac(kdf_mac(pkTe^~skC, r2), pkTe), 'CA_RESPONSE', '6', 'c'> ), + CAFinishC( $C, cert_id(certT), kdf_enc(pkTe^~skC, r2) ), Out( iid ) + ] + + /* + rule (modulo AC) CA_FINISH_C: + [ + In( <pkTe_t, 'CA_COMMIT', '5', 't'> ), + CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ), !LtkDH( $C, ~skC ) + ] + --[ + Eq( pkTe_t, pkTe ), + Completed( <kdf_enc(z, r2), kdf_mac(z, r2)>, <pkTe, 'g'^~skC, id_c, r2>, + $C, 'chip', z.1 + ) + ]-> + [ + Out( <r2, mac(kdf_mac(z, r2), pkTe), 'CA_RESPONSE', '6', 'c'> ), + CAFinishC( $C, z.1, kdf_enc(z, r2) ), Out( iid ) + ] + variants (modulo AC) + 1. ~skC = ~skC.23 + certT = certT.24 + pkTe = pkTe.27 + z = pkTe.27^~skC.23 + z.1 = cert_id(certT.24) + + 2. ~skC = ~skC.30 + certT = certT.31 + pkTe = z.41^inv(~skC.30) + z = z.41 + z.1 = cert_id(certT.31) + + 3. ~skC = ~skC.216 + certT = certT.217 + pkTe = x.428^x.429 + z = x.428^(~skC.216*x.429) + z.1 = cert_id(certT.217) + + 4. ~skC = ~skC.216 + certT = cert(x.428, x.429, z.231) + pkTe = pkTe.220 + z = pkTe.220^~skC.216 + z.1 = z.231 + + 5. ~skC = ~skC.217 + certT = cert(x.430, x.431, z.232) + pkTe = z.228^inv(~skC.217) + z = z.228 + z.1 = z.232 + + 6. ~skC = ~skC.220 + certT = certT.221 + pkTe = x.436^inv((~skC.220*x.437)) + z = x.436^inv(x.437) + z.1 = cert_id(certT.221) + + 7. ~skC = ~skC.220 + certT = certT.221 + pkTe = x.436^(x.437*inv(~skC.220)) + z = x.436^x.437 + z.1 = cert_id(certT.221) + + 8. ~skC = ~skC.221 + certT = certT.222 + pkTe = x.437^(x.438*inv((~skC.221*x.439))) + z = x.437^(x.438*inv(x.439)) + z.1 = cert_id(certT.222) + + 9. ~skC = ~skC.221 + certT = cert(x.433, x.434, z.236) + pkTe = x.438^x.439 + z = x.438^(~skC.221*x.439) + z.1 = z.236 + + 10. ~skC = ~skC.222 + certT = cert(x.435, x.436, z.237) + pkTe = x.440^inv((~skC.222*x.441)) + z = x.440^inv(x.441) + z.1 = z.237 + + 11. ~skC = ~skC.222 + certT = cert(x.435, x.436, z.237) + pkTe = x.440^(x.441*inv(~skC.222)) + z = x.440^x.441 + z.1 = z.237 + + 12. ~skC = ~skC.223 + certT = cert(x.436, x.437, z.238) + pkTe = x.441^(x.442*inv((~skC.223*x.443))) + z = x.441^(x.442*inv(x.443)) + z.1 = z.238 + + 13. certT = certT.19 + pkTe = DH_neutral + z = DH_neutral + z.1 = cert_id(certT.19) + + 14. certT = cert(x.233, x.234, z.126) + pkTe = DH_neutral + z = DH_neutral + z.1 = z.126 + */ + +rule (modulo E) CA_FINISH_T: + [ + In( <r2, tag, 'CA_RESPONSE', '6', 'c'> ), + CAInitT( <$T, iid>, skTe, id_c, certC ) + ] + --[ + Eq( mac(kdf_mac(cert_pk(certC)^skTe, r2), 'g'^skTe), tag ), + Completed( <kdf_enc(cert_pk(certC)^skTe, r2), + kdf_mac(cert_pk(certC)^skTe, r2)>, + <'g'^skTe, cert_pk(certC), id_c, r2>, $T, 'terminal', cert_id(certC) + ), + Finished( <'g'^skTe, cert_pk(certC), id_c, r2> ) + ]-> + [ + CAFinishT( cert_id(certC), $T, kdf_enc(cert_pk(certC)^skTe, r2) ), + !SessionReveal( <$T, iid>, skTe ), Out( iid ) + ] + + /* + rule (modulo AC) CA_FINISH_T: + [ + In( <r2, tag, 'CA_RESPONSE', '6', 'c'> ), + CAInitT( <$T, iid>, skTe, id_c, certC ) + ] + --[ + Eq( mac(kdf_mac(z.1, r2), z.2), tag ), + Completed( <kdf_enc(z.1, r2), kdf_mac(z.1, r2)>, <z.2, z.3, id_c, r2>, + $T, 'terminal', z + ), + Finished( <z.2, z.3, id_c, r2> ) + ]-> + [ + CAFinishT( z, $T, kdf_enc(z.1, r2) ), !SessionReveal( <$T, iid>, skTe ), + Out( iid ) + ] + variants (modulo AC) + 1. certC = certC.16 + skTe = one + z = cert_id(certC.16) + z.1 = cert_pk(certC.16) + z.2 = 'g' + z.3 = cert_pk(certC.16) + + 2. certC = certC.20 + skTe = skTe.24 + z = cert_id(certC.20) + z.1 = cert_pk(certC.20)^skTe.24 + z.2 = 'g'^skTe.24 + z.3 = cert_pk(certC.20) + + 3. certC = cert(z.33, x.52, z.32) + skTe = one + z = z.32 + z.1 = z.33 + z.2 = 'g' + z.3 = z.33 + + 4. certC = cert(z.55, x.87, z.52) + skTe = skTe.47 + z = z.52 + z.1 = z.55^skTe.47 + z.2 = 'g'^skTe.47 + z.3 = z.55 + + 5. certC = cert(DH_neutral, x.85, z.51) + skTe = skTe.46 + z = z.51 + z.1 = DH_neutral + z.2 = 'g'^skTe.46 + z.3 = DH_neutral + + 6. certC = cert(z.34^x.53, x.54, z.33) + skTe = inv(x.53) + z = z.33 + z.1 = z.34 + z.2 = 'g'^inv(x.53) + z.3 = z.34^x.53 + + 7. certC = cert(z.35^(x.54*inv(x.55)), x.56, z.34) + skTe = (x.55*inv(x.54)) + z = z.34 + z.1 = z.35 + z.2 = 'g'^(x.55*inv(x.54)) + z.3 = z.35^(x.54*inv(x.55)) + + 8. certC = cert(x.53^(x.54*x.55), x.56, z.34) + skTe = inv(x.54) + z = z.34 + z.1 = x.53^x.55 + z.2 = 'g'^inv(x.54) + z.3 = x.53^(x.54*x.55) + + 9. certC = cert(x.54^(x.55*x.56*inv(x.57)), x.58, z.35) + skTe = (x.57*inv(x.56)) + z = z.35 + z.1 = x.54^x.55 + z.2 = 'g'^(x.57*inv(x.56)) + z.3 = x.54^(x.55*x.56*inv(x.57)) + + 10. certC = cert(x.54^(x.55*inv((x.56*x.57))), x.58, z.35) + skTe = (x.57*inv(x.55)) + z = z.35 + z.1 = x.54^inv(x.56) + z.2 = 'g'^(x.57*inv(x.55)) + z.3 = x.54^(x.55*inv((x.56*x.57))) + + 11. certC = cert(z.54^inv(skTe.48), x.89, z.53) + skTe = skTe.48 + z = z.53 + z.1 = z.54 + z.2 = 'g'^skTe.48 + z.3 = z.54^inv(skTe.48) + + 12. certC = cert(x.55^(x.56*x.57*inv((x.58*x.59))), x.60, z.36) + skTe = (x.59*inv(x.57)) + z = z.36 + z.1 = x.55^(x.56*inv(x.58)) + z.2 = 'g'^(x.59*inv(x.57)) + z.3 = x.55^(x.56*x.57*inv((x.58*x.59))) + + 13. certC = cert(x.57^x.58, x.59, z.38) + skTe = inv((x.58*x.64)) + z = z.38 + z.1 = x.57^inv(x.64) + z.2 = 'g'^inv((x.58*x.64)) + z.3 = x.57^x.58 + + 14. certC = cert(x.57^x.58, x.59, z.38) + skTe = (x.64*inv(x.58)) + z = z.38 + z.1 = x.57^x.64 + z.2 = 'g'^(x.64*inv(x.58)) + z.3 = x.57^x.58 + + 15. certC = cert(x.57^inv(x.58), x.59, z.38) + skTe = inv(x.64) + z = z.38 + z.1 = x.57^inv((x.58*x.64)) + z.2 = 'g'^inv(x.64) + z.3 = x.57^inv(x.58) + + 16. certC = cert(x.57^inv(x.58), x.59, z.38) + skTe = (x.58*x.64) + z = z.38 + z.1 = x.57^x.64 + z.2 = 'g'^(x.58*x.64) + z.3 = x.57^inv(x.58) + + 17. certC = cert(x.58^x.59, x.60, z.39) + skTe = (x.65*inv((x.59*x.66))) + z = z.39 + z.1 = x.58^(x.65*inv(x.66)) + z.2 = 'g'^(x.65*inv((x.59*x.66))) + z.3 = x.58^x.59 + + 18. certC = cert(x.58^inv(x.59), x.60, z.39) + skTe = (x.65*inv(x.66)) + z = z.39 + z.1 = x.58^(x.65*inv((x.59*x.66))) + z.2 = 'g'^(x.65*inv(x.66)) + z.3 = x.58^inv(x.59) + + 19. certC = cert(x.58^inv((x.59*x.60)), x.61, z.39) + skTe = (x.59*x.66) + z = z.39 + z.1 = x.58^(x.66*inv(x.60)) + z.2 = 'g'^(x.59*x.66) + z.3 = x.58^inv((x.59*x.60)) + + 20. certC = cert(x.58^inv((x.59*x.60)), x.61, z.39) + skTe = (x.59*inv(x.66)) + z = z.39 + z.1 = x.58^inv((x.60*x.66)) + z.2 = 'g'^(x.59*inv(x.66)) + z.3 = x.58^inv((x.59*x.60)) + + 21. certC = cert(x.58^(x.59*x.60), x.61, z.39) + skTe = inv((x.59*x.66)) + z = z.39 + z.1 = x.58^(x.60*inv(x.66)) + z.2 = 'g'^inv((x.59*x.66)) + z.3 = x.58^(x.59*x.60) + + 22. certC = cert(x.58^(x.59*x.60), x.61, z.39) + skTe = (x.66*inv(x.59)) + z = z.39 + z.1 = x.58^(x.60*x.66) + z.2 = 'g'^(x.66*inv(x.59)) + z.3 = x.58^(x.59*x.60) + + 23. certC = cert(x.58^(x.59*inv(x.60)), x.61, z.39) + skTe = inv(x.66) + z = z.39 + z.1 = x.58^(x.59*inv((x.60*x.66))) + z.2 = 'g'^inv(x.66) + z.3 = x.58^(x.59*inv(x.60)) + + 24. certC = cert(x.58^(x.59*inv(x.60)), x.61, z.39) + skTe = inv((x.59*x.66)) + z = z.39 + z.1 = x.58^inv((x.60*x.66)) + z.2 = 'g'^inv((x.59*x.66)) + z.3 = x.58^(x.59*inv(x.60)) + + 25. certC = cert(x.58^(x.59*inv(x.60)), x.61, z.39) + skTe = (x.60*x.66) + z = z.39 + z.1 = x.58^(x.59*x.66) + z.2 = 'g'^(x.60*x.66) + z.3 = x.58^(x.59*inv(x.60)) + + 26. certC = cert(x.58^(x.59*inv(x.60)), x.61, z.39) + skTe = (x.60*x.66*inv(x.59)) + z = z.39 + z.1 = x.58^x.66 + z.2 = 'g'^(x.60*x.66*inv(x.59)) + z.3 = x.58^(x.59*inv(x.60)) + + 27. certC = cert(x.58^(x.59*inv(x.60)), x.61, z.39) + skTe = (x.60*inv((x.59*x.66))) + z = z.39 + z.1 = x.58^inv(x.66) + z.2 = 'g'^(x.60*inv((x.59*x.66))) + z.3 = x.58^(x.59*inv(x.60)) + + 28. certC = cert(x.59^inv((x.60*x.61)), x.62, z.40) + skTe = (x.60*x.67*inv(x.68)) + z = z.40 + z.1 = x.59^(x.67*inv((x.61*x.68))) + z.2 = 'g'^(x.60*x.67*inv(x.68)) + z.3 = x.59^inv((x.60*x.61)) + + 29. certC = cert(x.59^(x.60*x.61), x.62, z.40) + skTe = (x.67*inv((x.60*x.68))) + z = z.40 + z.1 = x.59^(x.61*x.67*inv(x.68)) + z.2 = 'g'^(x.67*inv((x.60*x.68))) + z.3 = x.59^(x.60*x.61) + + 30. certC = cert(x.59^(x.60*x.61*inv(x.62)), x.63, z.40) + skTe = inv((x.61*x.68)) + z = z.40 + z.1 = x.59^(x.60*inv((x.62*x.68))) + z.2 = 'g'^inv((x.61*x.68)) + z.3 = x.59^(x.60*x.61*inv(x.62)) + + 31. certC = cert(x.59^(x.60*x.61*inv(x.62)), x.63, z.40) + skTe = (x.62*x.68*inv(x.60)) + z = z.40 + z.1 = x.59^(x.61*x.68) + z.2 = 'g'^(x.62*x.68*inv(x.60)) + z.3 = x.59^(x.60*x.61*inv(x.62)) + + 32. certC = cert(x.59^(x.60*x.61*inv(x.62)), x.63, z.40) + skTe = (x.62*inv((x.60*x.68))) + z = z.40 + z.1 = x.59^(x.61*inv(x.68)) + z.2 = 'g'^(x.62*inv((x.60*x.68))) + z.3 = x.59^(x.60*x.61*inv(x.62)) + + 33. certC = cert(x.59^(x.60*inv(x.61)), x.62, z.40) + skTe = (x.61*x.67*inv((x.60*x.68))) + z = z.40 + z.1 = x.59^(x.67*inv(x.68)) + z.2 = 'g'^(x.61*x.67*inv((x.60*x.68))) + z.3 = x.59^(x.60*inv(x.61)) + + 34. certC = cert(x.59^(x.60*inv(x.61)), x.62, z.40) + skTe = (x.67*inv(x.68)) + z = z.40 + z.1 = x.59^(x.60*x.67*inv((x.61*x.68))) + z.2 = 'g'^(x.67*inv(x.68)) + z.3 = x.59^(x.60*inv(x.61)) + + 35. certC = cert(x.59^(x.60*inv(x.61)), x.62, z.40) + skTe = (x.67*inv((x.60*x.68))) + z = z.40 + z.1 = x.59^(x.67*inv((x.61*x.68))) + z.2 = 'g'^(x.67*inv((x.60*x.68))) + z.3 = x.59^(x.60*inv(x.61)) + + 36. certC = cert(x.59^(x.60*inv((x.61*x.62))), x.63, z.40) + skTe = (x.61*x.68) + z = z.40 + z.1 = x.59^(x.60*x.68*inv(x.62)) + z.2 = 'g'^(x.61*x.68) + z.3 = x.59^(x.60*inv((x.61*x.62))) + + 37. certC = cert(x.59^(x.60*inv((x.61*x.62))), x.63, z.40) + skTe = (x.61*x.68*inv(x.60)) + z = z.40 + z.1 = x.59^(x.68*inv(x.62)) + z.2 = 'g'^(x.61*x.68*inv(x.60)) + z.3 = x.59^(x.60*inv((x.61*x.62))) + + 38. certC = cert(x.59^(x.60*inv((x.61*x.62))), x.63, z.40) + skTe = (x.61*inv(x.68)) + z = z.40 + z.1 = x.59^(x.60*inv((x.62*x.68))) + z.2 = 'g'^(x.61*inv(x.68)) + z.3 = x.59^(x.60*inv((x.61*x.62))) + + 39. certC = cert(x.59^(x.60*inv((x.61*x.62))), x.63, z.40) + skTe = (x.61*inv((x.60*x.68))) + z = z.40 + z.1 = x.59^inv((x.62*x.68)) + z.2 = 'g'^(x.61*inv((x.60*x.68))) + z.3 = x.59^(x.60*inv((x.61*x.62))) + + 40. certC = cert(x.60^(x.61*x.62*inv(x.63)), x.64, z.41) + skTe = (x.63*x.69*inv((x.61*x.70))) + z = z.41 + z.1 = x.60^(x.62*x.69*inv(x.70)) + z.2 = 'g'^(x.63*x.69*inv((x.61*x.70))) + z.3 = x.60^(x.61*x.62*inv(x.63)) + + 41. certC = cert(x.60^(x.61*x.62*inv(x.63)), x.64, z.41) + skTe = (x.69*inv((x.61*x.70))) + z = z.41 + z.1 = x.60^(x.62*x.69*inv((x.63*x.70))) + z.2 = 'g'^(x.69*inv((x.61*x.70))) + z.3 = x.60^(x.61*x.62*inv(x.63)) + + 42. certC = cert(x.60^(x.61*x.62*inv((x.63*x.64))), x.65, z.41) + skTe = (x.63*x.70*inv(x.61)) + z = z.41 + z.1 = x.60^(x.62*x.70*inv(x.64)) + z.2 = 'g'^(x.63*x.70*inv(x.61)) + z.3 = x.60^(x.61*x.62*inv((x.63*x.64))) + + 43. certC = cert(x.60^(x.61*x.62*inv((x.63*x.64))), x.65, z.41) + skTe = (x.63*inv((x.61*x.70))) + z = z.41 + z.1 = x.60^(x.62*inv((x.64*x.70))) + z.2 = 'g'^(x.63*inv((x.61*x.70))) + z.3 = x.60^(x.61*x.62*inv((x.63*x.64))) + + 44. certC = cert(x.60^(x.61*inv((x.62*x.63))), x.64, z.41) + skTe = (x.62*x.69*inv(x.70)) + z = z.41 + z.1 = x.60^(x.61*x.69*inv((x.63*x.70))) + z.2 = 'g'^(x.62*x.69*inv(x.70)) + z.3 = x.60^(x.61*inv((x.62*x.63))) + + 45. certC = cert(x.60^(x.61*inv((x.62*x.63))), x.64, z.41) + skTe = (x.62*x.69*inv((x.61*x.70))) + z = z.41 + z.1 = x.60^(x.69*inv((x.63*x.70))) + z.2 = 'g'^(x.62*x.69*inv((x.61*x.70))) + z.3 = x.60^(x.61*inv((x.62*x.63))) + + 46. certC = cert(x.61^(x.62*x.63*inv((x.64*x.65))), x.66, z.42) + skTe = (x.64*x.71*inv((x.62*x.72))) + z = z.42 + z.1 = x.61^(x.63*x.71*inv((x.65*x.72))) + z.2 = 'g'^(x.64*x.71*inv((x.62*x.72))) + z.3 = x.61^(x.62*x.63*inv((x.64*x.65))) + + 47. certC = cert(x.87^x.88, x.89, z.53) + skTe = skTe.48 + z = z.53 + z.1 = x.87^(skTe.48*x.88) + z.2 = 'g'^skTe.48 + z.3 = x.87^x.88 + + 48. certC = cert(x.88^inv((skTe.49*x.89)), x.91, z.54) + skTe = skTe.49 + z = z.54 + z.1 = x.88^inv(x.89) + z.2 = 'g'^skTe.49 + z.3 = x.88^inv((skTe.49*x.89)) + + 49. certC = cert(x.88^(x.89*inv(skTe.49)), x.91, z.54) + skTe = skTe.49 + z = z.54 + z.1 = x.88^x.89 + z.2 = 'g'^skTe.49 + z.3 = x.88^(x.89*inv(skTe.49)) + + 50. certC = cert(x.89^(x.90*inv((skTe.50*x.91))), x.93, z.55) + skTe = skTe.50 + z = z.55 + z.1 = x.89^(x.90*inv(x.91)) + z.2 = 'g'^skTe.50 + z.3 = x.89^(x.90*inv((skTe.50*x.91))) + */ + +restriction Equality: + "∀ x y #i. (Eq( x, y ) @ #i) ⇒ (x = y)" + // safety formula + +lemma weak_agreement_C: + all-traces + "∀ k sid C T #i #t. + ((Completed( k, sid, C, 'chip', T ) @ #i) ∧ (Finished( sid ) @ #t)) ⇒ + (((∃ k2 sid2 #j. Completed( k2, sid2, T, 'terminal', C ) @ #j) ∨ + (∃ #k.1. Corrupted( C ) @ #k.1)) ∨ + (∃ #k.1. Corrupted( T ) @ #k.1))" +/* +guarded formula characterizing all counter-examples: +"∃ k sid C T #i #t. + (Completed( k, sid, C, 'chip', T ) @ #i) ∧ (Finished( sid ) @ #t) + ∧ + (∀ k2 sid2 #j. (Completed( k2, sid2, T, 'terminal', C ) @ #j) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( C ) @ #k.1) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( T ) @ #k.1) ⇒ ⊥)" +*/ +simplify +solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #t ) + case CA_INIT_T + solve( Completed( k, <'g'^~skTe, z.1, id_c, r2>, C, 'chip', T.1 ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, 'g'^~skTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( !KU( sign(<~id_c, ~r1, 'g'^~skTe>, x) ) @ #vk.37 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.45 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.54 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.57 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.55 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.58 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.40 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.44 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.48 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.46 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.57 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.41 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.47 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.50 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.49 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.46 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.59 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.42 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.48 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.52 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.61 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.64 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.62 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.43 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.51 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.54 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + qed + qed + qed + qed +qed + +lemma weak_agreement_T: + all-traces + "∀ k sid C T #i #t. + ((Completed( k, sid, T, 'terminal', C ) @ #i) ∧ (Finished( sid ) @ #t)) ⇒ + (((∃ k2 sid2 #j. Completed( k2, sid2, C, 'chip', T ) @ #j) ∨ + (∃ #k.1. Corrupted( C ) @ #k.1)) ∨ + (∃ #k.1. Corrupted( T ) @ #k.1))" +/* +guarded formula characterizing all counter-examples: +"∃ k sid C T #i #t. + (Completed( k, sid, T, 'terminal', C ) @ #i) ∧ (Finished( sid ) @ #t) + ∧ + (∀ k2 sid2 #j. (Completed( k2, sid2, C, 'chip', T ) @ #j) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( C ) @ #k.1) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( T ) @ #k.1) ⇒ ⊥)" +*/ +simplify +solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #t ) + case CA_INIT_T + solve( Completed( k, <'g'^~skTe, z.1, id_c, r2>, T.1, 'terminal', C + ) @ #i ) + case CA_FINISH_T + solve( CAInitT( <$T, iid>, ~skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.3 ) + case CA_FINISH_C + solve( !KU( sign(<~id_c.1, ~r1.1, 'g'^~skTe>, x) ) @ #vk.37 ) + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, C>, ca_sk), C) ) @ #vk.17 ) + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), z>, ca_sk), z) ) @ #vk.42 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + solve( !KU( ~r2 ) @ #vk.10 ) + case CA_FINISH_C + solve( !KU( ~id_c.1 ) @ #vk.46 ) + case TA_CHALLENGE_C + solve( !KU( ~r1 ) @ #vk.47 ) + case TA_CHALLENGE_C + solve( !KU( 'g'^~skTe ) @ #vk.32 ) + case CA_INIT_T + SOLVED // trace found + qed + qed + qed + qed + qed + qed + qed + qed + qed + qed + qed +qed + +lemma agreement_C: + all-traces + "∀ k sid C T #i #t. + ((Completed( k, sid, C, 'chip', T ) @ #i) ∧ (Finished( sid ) @ #t)) ⇒ + (((∃ #j. Completed( k, sid, T, 'terminal', C ) @ #j) ∨ + (∃ #k.1. Corrupted( C ) @ #k.1)) ∨ + (∃ #k.1. Corrupted( T ) @ #k.1))" +/* +guarded formula characterizing all counter-examples: +"∃ k sid C T #i #t. + (Completed( k, sid, C, 'chip', T ) @ #i) ∧ (Finished( sid ) @ #t) + ∧ + (∀ #j. (Completed( k, sid, T, 'terminal', C ) @ #j) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( C ) @ #k.1) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( T ) @ #k.1) ⇒ ⊥)" +*/ +simplify +solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #t ) + case CA_INIT_T + solve( Completed( k, <'g'^~skTe, z.1, id_c, r2>, C, 'chip', T.1 ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, 'g'^~skTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( !KU( sign(<~id_c, ~r1, 'g'^~skTe>, x) ) @ #vk.37 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.45 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.54 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.57 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.55 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.58 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.40 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.44 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.48 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.46 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.57 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), T>, ca_sk), T) ) @ #vk.41 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), T>, ca_sk) ) @ #vk.47 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.50 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.49 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.46 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.59 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.42 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.48 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.52 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.61 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.64 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.62 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), T>, ca_sk), T) ) @ #vk.43 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), T>, ca_sk) ) @ #vk.51 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.54 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + qed + qed + qed + qed +qed + +lemma agreement_T: + all-traces + "∀ k sid C T #i #t. + ((Completed( k, sid, T, 'terminal', C ) @ #i) ∧ (Finished( sid ) @ #t)) ⇒ + (((∃ #j. Completed( k, sid, C, 'chip', T ) @ #j) ∨ + (∃ #k.1. Corrupted( C ) @ #k.1)) ∨ + (∃ #k.1. Corrupted( T ) @ #k.1))" +/* +guarded formula characterizing all counter-examples: +"∃ k sid C T #i #t. + (Completed( k, sid, T, 'terminal', C ) @ #i) ∧ (Finished( sid ) @ #t) + ∧ + (∀ #j. (Completed( k, sid, C, 'chip', T ) @ #j) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( C ) @ #k.1) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( T ) @ #k.1) ⇒ ⊥)" +*/ +simplify +solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #t ) + case CA_INIT_T + solve( Completed( k, <'g'^~skTe, z.1, id_c, r2>, T.1, 'terminal', C + ) @ #i ) + case CA_FINISH_T + solve( CAInitT( <$T, iid>, ~skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.3 ) + case CA_FINISH_C + solve( !KU( sign(<~id_c.1, ~r1.1, 'g'^~skTe>, x) ) @ #vk.37 ) + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, C>, ca_sk), C) ) @ #vk.17 ) + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), z>, ca_sk), z) ) @ #vk.42 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + solve( !KU( ~r2 ) @ #vk.10 ) + case CA_FINISH_C + solve( !KU( ~id_c.1 ) @ #vk.46 ) + case TA_CHALLENGE_C + solve( !KU( ~r1 ) @ #vk.47 ) + case TA_CHALLENGE_C + solve( !KU( 'g'^~skTe ) @ #vk.32 ) + case CA_INIT_T + SOLVED // trace found + qed + qed + qed + qed + qed + qed + qed + qed + qed + qed + qed +qed + +lemma aliveness: + all-traces + "∀ k sid A role B #i #t. + ((Completed( k, sid, A, role, B ) @ #i) ∧ (Finished( sid ) @ #t)) ⇒ + ((∃ k2 sid2 role2 C #j. Completed( k2, sid2, B, role2, C ) @ #j) ∨ + (∃ #k.1. Corrupted( B ) @ #k.1))" +/* +guarded formula characterizing all counter-examples: +"∃ k sid A role B #i #t. + (Completed( k, sid, A, role, B ) @ #i) ∧ (Finished( sid ) @ #t) + ∧ + (∀ k2 sid2 role2 C #j. (Completed( k2, sid2, B, role2, C ) @ #j) ⇒ ⊥) ∧ + (∀ #k.1. (Corrupted( B ) @ #k.1) ⇒ ⊥)" +*/ +simplify +solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #t ) + case CA_INIT_T + solve( Completed( k, <'g'^~skTe, z.1, id_c, r2>, A, role, B ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, 'g'^~skTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( !KU( sign(<~id_c, ~r1, 'g'^~skTe>, x) ) @ #vk.37 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.45 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.54 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.57 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.55 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.58 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.40 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.44 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.44 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.48 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.46 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.57 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.45 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(~skT), sign(<pk(~skT), B>, ca_sk), B) ) @ #vk.41 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<pk(~skT), B>, ca_sk) ) @ #vk.47 ) + case CA_Sign_ltk + by contradiction /* from formulas */ + next + case TA_INIT_T + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.50 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, z>, ca_sk), z) ) @ #vk.17 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.49 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.58 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.46 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.59 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.42 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, z>, ca_sk) ) @ #vk.48 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.1, ~r1.2, pkTe>, x.1) ) @ #vk.52 ) + case TA_RESPONSE_T + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.48 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.52 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.61 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.53 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.64 ) + qed + qed + next + case c_sign + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.47 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.62 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( cert(pk(x), sign(<pk(x), B>, ca_sk), B) ) @ #vk.43 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_cert + solve( !KU( sign(<pk(x), B>, ca_sk) ) @ #vk.51 ) + case CA_Sign_ltk + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_ltk + by contradiction /* from formulas */ + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.54 ) + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.51 ) + qed + qed + qed + qed + qed + next + case CA_FINISH_T + solve( CAInitT( <$T, iid>, ~skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.3 ) + case CA_FINISH_C + solve( !KU( sign(<~id_c.1, ~r1.1, 'g'^~skTe>, x) ) @ #vk.37 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.17 ) + case CA_INIT_C + by contradiction /* from formulas */ + next + case CA_Sign_dh + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.44 ) + case CA_INIT_C + by contradiction /* from formulas */ + next + case CA_Sign_dh + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.47 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.17 ) + case CA_INIT_C + by contradiction /* from formulas */ + next + case CA_Sign_dh + by contradiction /* from formulas */ + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.49 ) + case CA_INIT_C + by contradiction /* from formulas */ + next + case CA_Sign_dh + by contradiction /* from formulas */ + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.52 ) + qed + qed + qed + next + case c_mac + solve( !KU( cert(z.1, sign(<z.1, B>, ca_sk), B) ) @ #vk.16 ) + case CA_INIT_C + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.23 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.26 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.41 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.45 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.45 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.45 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.47 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.41 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.46 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.46 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.46 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.48 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.23 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.25 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.26 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.26 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.26 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.26 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.28 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + qed + next + case CA_Sign_ltk + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.23 ) + case c_kdf_mac + solve( !KU( pk(~ltk)^~skTe ) @ #vk.25 ) + case c_exp + solve( !KU( ~skTe ) @ #vk.27 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case TA_INIT_T + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.23 ) + case c_kdf_mac + solve( !KU( pk(~ltk)^~skTe ) @ #vk.25 ) + case c_exp + solve( !KU( ~skTe ) @ #vk.27 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_cert + solve( !KU( sign(<z.1, B>, ca_sk) ) @ #vk.26 ) + case CA_INIT_C + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.24 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.1, ~r1.1, pkTe>, x) ) @ #vk.29 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.44 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.48 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.48 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.48 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.48 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.50 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.44 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.49 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.49 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.49 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.51 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.24 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.28 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.29 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.29 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.29 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.29 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.31 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + qed + next + case CA_Sign_ltk + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.24 ) + case c_kdf_mac + solve( !KU( pk(~ltk)^~skTe ) @ #vk.28 ) + case c_exp + solve( !KU( ~skTe ) @ #vk.29 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case TA_INIT_T + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.24 ) + case c_kdf_mac + solve( !KU( pk(~ltk)^~skTe ) @ #vk.28 ) + case c_exp + solve( !KU( ~skTe ) @ #vk.29 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.29 ) + qed + qed + qed + qed + qed +qed + +lemma session_uniqueness: + all-traces + "∀ A B k sid sid2 role #i #j. + ((Completed( k, sid, A, role, B ) @ #i) ∧ + (Completed( k, sid2, A, role, B ) @ #j)) ⇒ + ((#i = #j) ∧ (sid = sid2))" +/* +guarded formula characterizing all counter-examples: +"∃ A B k sid sid2 role #i #j. + (Completed( k, sid, A, role, B ) @ #i) ∧ + (Completed( k, sid2, A, role, B ) @ #j) + ∧ + ((¬(#i = #j)) ∨ (¬(sid = sid2)))" +*/ +simplify +solve( (¬(#i = #j)) ∥ (¬(sid = sid2)) ) + case case_1 + solve( (#i < #j) ∥ (#j < #i) ) + case case_1 + solve( Completed( k, sid, A, role, B ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( Completed( <kdf_enc(z, ~r2), kdf_mac(z, ~r2)>, sid2, $C, 'chip', B + ) @ #j ) + case CA_FINISH_C + solve( CAInitC( <$C, iid.1>, certT, pkTe.1, id_c.1, r1.1, ~r2 ) ▶₁ #j ) + case CA_INIT_C + by contradiction /* cyclic */ + qed + qed + qed + qed + next + case CA_FINISH_T + solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( Completed( <kdf_enc(z, r2), kdf_mac(z, r2)>, sid2, $T, 'terminal', + B + ) @ #j ) + case CA_FINISH_T + solve( CAInitT( <$T, iid.1>, skTe.1, id_c.1, certC ) ▶₁ #j ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.4 ) + case CA_FINISH_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( sign(<~id_c.2, ~r1.2, 'g'^~skTe>, x) ) @ #vk.46 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.54 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.62 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.64 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.67 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.63 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.65 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.66 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.74 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.52 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.54 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.55 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.57 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.65 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.67 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.66 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.68 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.69 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.72 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.74 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.55 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.57 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.58 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.63 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.56 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.59 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.67 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.69 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.72 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.68 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.70 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.79 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.57 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.59 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.62 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.68 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.58 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.62 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.70 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.72 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.75 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.76 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.78 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.80 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.71 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.73 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.76 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.77 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.79 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.81 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.60 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.62 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_mac + solve( !KU( cert(z.1, sign(<z.1, B>, ca_sk), B) ) @ #vk.21 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.35 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.56 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.34 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.37 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<z.1, B>, ca_sk) ) @ #vk.35 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.38 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.59 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.37 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.40 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.41 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.38 ) + qed + qed + qed + qed + qed + qed + qed + next + case case_2 + solve( Completed( k, sid, A, role, B ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( Completed( <kdf_enc(z, ~r2), kdf_mac(z, ~r2)>, sid2, $C, 'chip', B + ) @ #j ) + case CA_FINISH_C + solve( CAInitC( <$C, iid.1>, certT, pkTe.1, id_c.1, r1.1, ~r2 ) ▶₁ #j ) + case CA_INIT_C + by contradiction /* cyclic */ + qed + qed + qed + qed + next + case CA_FINISH_T + solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( Completed( <kdf_enc(z, r2), kdf_mac(z, r2)>, sid2, $T, 'terminal', + B + ) @ #j ) + case CA_FINISH_T + solve( CAInitT( <$T, iid.1>, skTe.1, id_c.1, certC ) ▶₁ #j ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.4 ) + case CA_FINISH_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( sign(<~id_c.2, ~r1.2, 'g'^~skTe>, x) ) @ #vk.46 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.54 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.62 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.64 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.67 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.63 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.65 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.66 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.52 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.54 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.55 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.57 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.65 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.67 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.66 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.68 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.69 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.72 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.55 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.57 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.58 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.56 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.59 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.67 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.69 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.72 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.68 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.70 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.57 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.59 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.62 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.58 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.62 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.70 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.72 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.75 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.76 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.71 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.73 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.76 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.77 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.60 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.62 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_mac + solve( !KU( cert(z.1, sign(<z.1, B>, ca_sk), B) ) @ #vk.21 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.35 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.56 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.34 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.37 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<z.1, B>, ca_sk) ) @ #vk.35 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.38 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.59 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.37 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.40 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.41 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* cyclic */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.38 ) + qed + qed + qed + qed + qed + qed + qed + qed +next + case case_2 + solve( Completed( k, sid, A, role, B ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( Completed( <kdf_enc(z, ~r2), kdf_mac(z, ~r2)>, sid2, $C, 'chip', B + ) @ #j ) + case CA_FINISH_C + solve( CAInitC( <$C, iid.1>, certT, pkTe.1, id_c.1, r1.1, ~r2 ) ▶₁ #j ) + case CA_INIT_C + by contradiction /* from formulas */ + qed + qed + qed + qed + next + case CA_FINISH_T + solve( CAInitT( <$T, iid>, skTe, id_c, certC ) ▶₁ #i ) + case CA_INIT_T + solve( Completed( <kdf_enc(z, r2), kdf_mac(z, r2)>, sid2, $T, 'terminal', + B + ) @ #j ) + case CA_FINISH_T + solve( CAInitT( <$T, iid.1>, skTe.1, id_c.1, certC ) ▶₁ #j ) + case CA_INIT_T + solve( !KU( mac(kdf_mac(z, r2), 'g'^~skTe) ) @ #vk.4 ) + case CA_FINISH_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( sign(<~id_c.2, ~r1.2, 'g'^~skTe>, x) ) @ #vk.46 ) + case TA_RESPONSE_T + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.54 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.62 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.64 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.65 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.67 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.67 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.63 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.65 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.66 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.71 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.74 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.52 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.54 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.55 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.57 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.65 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.67 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.68 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.68 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.70 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.72 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.66 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.68 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.69 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.69 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.71 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.73 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.72 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.74 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.55 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.57 ) + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.58 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.63 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.56 ) + qed + qed + next + case c_sign + solve( !KU( cert('g'^~skC, sign(<'g'^~skC, B>, ca_sk), B) ) @ #vk.22 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.59 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.67 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.69 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.70 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.70 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.72 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.75 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.72 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.68 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.70 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.71 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.71 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.73 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.76 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.79 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.57 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.59 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.60 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.62 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.65 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.62 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.68 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<'g'^~skC, B>, ca_sk) ) @ #vk.58 ) + case CA_INIT_C + solve( !KU( sign(<~id_c.3, ~r1.3, pkTe>, x.1) ) @ #vk.62 ) + case TA_RESPONSE_T + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.70 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.72 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.73 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.40 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.73 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.75 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.77 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.75 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.76 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.41 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.78 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.80 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.71 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.73 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.74 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.74 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.76 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.78 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.76 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.77 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.39 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.79 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.81 ) + qed + qed + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( mac(kdf_mac('g'^(~skC*~skTe), ~r2), 'g'^~skTe.1) ) @ #vk.31 ) + case c_mac + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.60 ) + case c_kdf_mac + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.62 ) + case CA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.63 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.63 ) + case Reveal_dh + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.65 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.67 ) + qed + qed + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.65 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.66 ) + case Reveal_session + solve( !KU( cert('g'^(~skC*~skTe*inv(~skTe.1)), + sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~skC*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.68 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.70 ) + qed + qed + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_mac + solve( !KU( cert(z.1, sign(<z.1, B>, ca_sk), B) ) @ #vk.21 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.35 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.54 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.36 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.37 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.57 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.60 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.56 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.50 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.55 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.55 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.34 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.35 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.58 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.61 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.34 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.35 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.35 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.32 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.33 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.38 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.41 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.37 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.32 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.29 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.30 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.37 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.40 ) + qed + qed + qed + qed + qed + next + case c_cert + solve( !KU( sign(<z.1, B>, ca_sk) ) @ #vk.35 ) + case CA_INIT_C + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( sign(<~id_c.2, ~r1.2, pkTe>, x) ) @ #vk.38 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.57 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.57 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.37 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.38 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.60 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.62 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.59 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.60 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + next + case c_sign + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.53 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.58 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.58 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.35 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk), $C) + ) @ #vk.36 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $C>, ca_sk) ) @ #vk.61 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.63 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.60 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.61 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + qed + next + case CA_Sign_dh + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac('g'^(~ltk*~skTe), r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( 'g'^(~ltk*~skTe) ) @ #vk.37 ) + case CA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.38 ) + case Reveal_session + by contradiction /* cyclic */ + qed + next + case TA_INIT_T + solve( !KU( ~ltk ) @ #vk.38 ) + case Reveal_dh + solve( !KU( mac(kdf_mac('g'^(~ltk*~skTe), r2), 'g'^~skTe.1) ) @ #vk.33 ) + case c_mac + solve( !KU( cert('g'^(~ltk*~skTe*inv(~skTe.1)), + sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.34 ) + case c_cert + solve( !KU( sign(<'g'^(~ltk*~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.41 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.43 ) + qed + qed + qed + qed + next + case c_exp + solve( !KU( ~ltk ) @ #vk.40 ) + case Reveal_dh + solve( !KU( ~skTe ) @ #vk.41 ) + case Reveal_session + by contradiction /* cyclic */ + qed + qed + qed + qed + qed + next + case CA_Sign_ltk + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk), $A) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $A>, ca_sk) ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case TA_INIT_T + solve( splitEqs(1) ) + case split_case_1 + by contradiction /* from formulas */ + next + case split_case_2 + solve( !KU( kdf_mac(pk(~ltk)^~skTe, r2) ) @ #vk.33 ) + case c_kdf_mac + solve( !KU( mac(kdf_mac(pk(~ltk)^~skTe, r2), 'g'^~skTe.1) ) @ #vk.30 ) + case c_mac + solve( !KU( cert(pk(~ltk)^(~skTe*inv(~skTe.1)), + sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk), $T.1) + ) @ #vk.31 ) + case c_cert + solve( !KU( sign(<pk(~ltk)^(~skTe*inv(~skTe.1)), $T.1>, ca_sk) + ) @ #vk.40 ) + case c_sign + by solve( !KU( ca_sk ) @ #vk.42 ) + qed + qed + qed + qed + qed + next + case c_sign + by solve( !KU( ca_sk ) @ #vk.38 ) + qed + qed + qed + qed + qed + qed + qed +qed + +lemma consistency: + all-traces + "∀ C T k k2 sid #i #j. + ((Completed( k, sid, C, 'chip', T ) @ #i) ∧ + (Completed( k2, sid, T, 'terminal', C ) @ #j)) ⇒ + ((k = k2) ∨ (∃ #m. Corrupted( C ) @ #m))" +/* +guarded formula characterizing all counter-examples: +"∃ C T k k2 sid #i #j. + (Completed( k, sid, C, 'chip', T ) @ #i) ∧ + (Completed( k2, sid, T, 'terminal', C ) @ #j) + ∧ + (¬(k = k2)) ∧ (∀ #m. (Corrupted( C ) @ #m) ⇒ ⊥)" +*/ +simplify +solve( Completed( k, sid, C, 'chip', T ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( Completed( k2, <pkTe, 'g'^~skC, ~id_c, ~r2>, T, 'terminal', $C + ) @ #j ) + case CA_FINISH_T + solve( CAInitT( <$T, iid.1>, skTe, ~id_c, cert('g'^~skC, x.1, $C) + ) ▶₁ #j ) + case CA_INIT_T + by contradiction /* from formulas */ + qed + qed + qed + qed +qed + +lemma key_secrecy: + all-traces + "∀ C T k sid #i #j. + ((Completed( k, sid, C, 'chip', T ) @ #i) ∧ + (Completed( k, sid, T, 'terminal', C ) @ #j)) ⇒ + (((¬(∃ #m. K( k ) @ #m)) ∨ (∃ iid #m. Revealed( <T, iid> ) @ #m)) ∨ + (∃ #m. Corrupted( C ) @ #m))" +/* +guarded formula characterizing all counter-examples: +"∃ C T k sid #i #j. + (Completed( k, sid, C, 'chip', T ) @ #i) ∧ + (Completed( k, sid, T, 'terminal', C ) @ #j) + ∧ + (∃ #m. (K( k ) @ #m)) ∧ + (∀ iid #m. (Revealed( <T, iid> ) @ #m) ⇒ ⊥) ∧ + (∀ #m. (Corrupted( C ) @ #m) ⇒ ⊥)" +*/ +simplify +solve( Completed( k, sid, C, 'chip', T ) @ #i ) + case CA_FINISH_C + solve( CAInitC( <$C, iid>, certT, pkTe, id_c, r1, r2 ) ▶₁ #i ) + case CA_INIT_C + solve( !LtkDH( $C, ~skC ) ▶₂ #i ) + case Generate_static_dh + solve( Completed( <kdf_enc(z, ~r2), kdf_mac(z, ~r2)>, + <pkTe, 'g'^~skC, ~id_c, ~r2>, T, 'terminal', $C + ) @ #j ) + case CA_FINISH_T + solve( CAInitT( <$T, iid.1>, skTe, ~id_c, cert('g'^~skC, x.1, $C) + ) ▶₁ #j ) + case CA_INIT_T + solve( !KU( kdf_enc('g'^(~skC*~skTe), ~r2) ) @ #vk.15 ) + case c_kdf_enc + solve( !KU( kdf_mac('g'^(~skC*~skTe), ~r2) ) @ #vk.16 ) + case c_kdf_mac + solve( !KU( sign(<~id_c, ~r1, 'g'^~skTe>, x) ) @ #vk.17 ) + case TA_RESPONSE_T + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.46 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.50 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.47 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.47 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.47 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.49 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + next + case c_sign + solve( !KU( 'g'^(~skC*~skTe) ) @ #vk.48 ) + case CA_INIT_C + solve( !KU( ~skTe ) @ #vk.54 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case CA_INIT_T + by contradiction /* cyclic */ + next + case CA_Sign_dh + solve( !KU( ~skTe ) @ #vk.51 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case Generate_static_dh + solve( !KU( ~skTe ) @ #vk.51 ) + case Reveal_session + by contradiction /* from formulas */ + qed + next + case TA_INIT_T + solve( !KU( ~skC ) @ #vk.51 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + next + case c_exp + solve( !KU( ~skC ) @ #vk.53 ) + case Reveal_dh + by contradiction /* from formulas */ + qed + qed + qed + qed + qed + qed + qed + qed + qed +qed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* All wellformedness checks were successful. */ + +/* +Generated from: +Tamarin version 1.8.0 +Maude version 3.3.1 +Git revision: f172d7f00b1485446a1e7a42dc14623c2189cc42, branch: master +Compiled at: 2024-01-16 15:38:46.116852601 UTC +*/ + +end + +============================================================================== +summary of summaries: + +analyzed: BasicEAC.spthy + + processing time: 46.12s + + weak_agreement_C (all-traces): verified (124 steps) + weak_agreement_T (all-traces): falsified - found trace (14 steps) + agreement_C (all-traces): verified (124 steps) + agreement_T (all-traces): falsified - found trace (14 steps) + aliveness (all-traces): verified (232 steps) + session_uniqueness (all-traces): verified (1269 steps) + consistency (all-traces): verified (7 steps) + key_secrecy (all-traces): verified (33 steps) + +============================================================================== diff --git a/results/processor.45369362 b/results/processor.45369362 new file mode 100644 index 0000000000000000000000000000000000000000..03663c845bf67063d17a944190d92d00da32869d --- /dev/null +++ b/results/processor.45369362 @@ -0,0 +1,20 @@ + *-cpu:0 + product: Intel(R) Xeon(R) Platinum 8470Q + vendor: Intel Corp. + physical id: 2 + bus info: cpu@0 + version: 6.143.8 + size: 3753MHz + width: 64 bits + capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities cpufreq + configuration: microcode=721421489 + *-cpu:1 + product: Intel(R) Xeon(R) Platinum 8470Q + vendor: Intel Corp. + physical id: 3 + bus info: cpu@1 + version: 6.143.8 + size: 3764MHz + width: 64 bits + capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities cpufreq + configuration: microcode=721421489