Doing expand get, insert and prove unique annotations... Done. Doing simplify (non-expanded game)... No change. Doing expand... Done. Doing remove assignments of findcond... Done. Doing simplify... Run simplify 2 time(s). Fixpoint reached. Done. Doing move all binders... No change. Doing remove assignments of findcond... Done. Doing merge branches... No change. Proof of (one-session) secrecy of keyA failed: keyA is defined from kA, which is not defined only by restrictions. Proof of (one-session) secrecy of keyB failed: keyB is defined from kB, which is not defined only by restrictions. Proof of inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB failed: Found endA(A, hostB, ga, gb_1) at 78 but could not prove inj-event(beginB(A, B, x, y)) Proof of inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB failed: Found endB(hostA, B, ga_1, gb_2) at 391 but could not prove inj-event(endA(A, B, x, y)) Doing remove assignments of binder kB... Done. Doing remove assignments of binder kA... Done. Proof of (one-session) secrecy of keyA failed: keyA is not defined only by restrictions or assignments. Proof of (one-session) secrecy of keyB failed: keyB is not defined only by restrictions or assignments. Proof of inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB failed: Found endA(A, hostB, ga, gb_1) at 73 but could not prove inj-event(beginB(A, B, x, y)) Proof of inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB failed: Found endB(hostA, B, ga_1, gb_2) at 370 but could not prove inj-event(endA(A, B, x, y)) Trying equivalence uf_cma(sign)... Failed. Trying equivalence rom(h)... Transf. OK Proba. computed Transf. done Succeeded. Doing simplify (non-expanded game)... No change. Doing expand... Done. Doing remove assignments of findcond... Done. Doing simplify... Run simplify 2 time(s). Fixpoint reached. Done. Doing move all binders... Done. Doing remove assignments of findcond... Done. Doing merge branches... No change. Proof of (one-session) secrecy of keyA failed: keyA is defined from r_7; at 493, bad usage(s) of r_7. Proof of (one-session) secrecy of keyB failed: keyB is defined from r_7; at 493, bad usage(s) of r_7. Proof of inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB failed: Found endA(A, hostB, ga, gb_1) at 80 but could not prove inj-event(beginB(A, B, x, y)) Proof of inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB failed: Found endB(hostA, B, ga_1, gb_2) at 1490 but could not prove inj-event(endA(A, B, x, y)) Trying equivalence uf_cma(sign)... Failed. Trying equivalence rom(h)... Failed. Trying equivalence cdh(exp)... Failed. Doing remove assignments of binder skA... Done. Doing remove assignments of binder pkA... Done. Trying equivalence uf_cma(sign) with r_14, rkA... Transf. OK Proba. computed Transf. done Succeeded. Doing simplify (non-expanded game)... Applied collision new r1: keyseed; new r2: keyseed; return((pkgen(r1) = pkgen2(r2))) <=(Psigncoll)=> return(false) with r2 -> rkA, r1 -> rkB Probability: Psigncoll Done. Doing expand... Done. Doing remove assignments of findcond... Done. Doing simplify... Doing global dependency analysis on a inside simplify... At 29, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 881, output message (hostA, B, gb_2, sign_r(m_3, skB, r_3)) depends on b. No change Doing global dependency analysis on b inside simplify... At 789, output message (hostA, B, gb_2, sign_r(m_3, skB, r_3)) depends on b. No change Doing global dependency analysis on a inside simplify... At 29, output message (A, hostB, ga) depends on a. No change Run simplify 2 time(s). Maximum reached. Done. Doing move all binders... Done. Doing remove assignments of findcond... Done. Doing merge branches... No change. Proof of (one-session) secrecy of keyA failed: keyA is defined from r_7; at 477, bad usage(s) of r_7. Proof of (one-session) secrecy of keyB failed: keyB is defined from r_7; at 477, bad usage(s) of r_7. Proof of inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB failed: Found endA(A, hostB, ga, gb_1) at 78 but could not prove inj-event(beginB(A, B, x, y)) Applied collision new x_1: Z; forall Y: G; return((exp(g, x_1) = Y)) <=(PCollKey1)=> return(false) if Y independent-of x_1 with x_1 -> b[iB_36], Y -> exp(g, b[iB_35]) Probability: PCollKey1 * NB * NB Applied collision new x_1: Z; new y_1: Z; forall Y: G; return((exp(g, mult(x_1, y_1)) = Y)) <=(PCollKey2)=> return(false) if (Y independent-of x_1 || Y independent-of y_1) with y_1 -> a[i2_3624], x_1 -> b[iB_10], Y -> exp(g, mult(b[iB_9], a[i2_3623])) Probability: PCollKey2 * NA * NB * NA * NB Proved query inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB Probability: NB^2 * PCollKey1 + NA^2 * NB^2 * PCollKey2 Trying equivalence uf_cma(sign)... Failed. Trying equivalence rom(h)... Failed. Trying equivalence cdh(exp)... Failed. Doing remove assignments of binder skB... Done. Doing remove assignments of binder pkB... Done. Trying equivalence uf_cma(sign) with rkB... Transf. OK Proba. computed Transf. done Succeeded. Doing simplify (non-expanded game)... Done. Doing expand... Done. Doing remove assignments of findcond... Done. Doing simplify... Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 801, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Applied collision new x_1: Z; forall Y: G; return((exp(g, x_1) = Y)) <=(PCollKey1)=> return(false) if Y independent-of x_1 with x_1 -> a[ri_34], Y -> exp(g, a) Probability: PCollKey1 * NA * NA Applied collision new x_1: Z; new y_1: Z; forall Y: G; return((exp(g, mult(x_1, y_1)) = Y)) <=(PCollKey2)=> return(false) if (Y independent-of x_1 || Y independent-of y_1) with y_1 -> b, x_1 -> a[i2_4757], Y -> exp(g, mult(b[i2_4759], a[ri_20])) Probability: PCollKey2 * NB * NA * NA * NB Applied collision new x_1: Z; forall Y: G; return((exp(g, x_1) = Y)) <=(PCollKey1)=> return(false) if Y independent-of x_1 with x_1 -> b, Y -> exp(g, b[i2_4573]) Probability: PCollKey1 * NB * NB Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 680, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Run simplify 2 time(s). Fixpoint reached. Done. Doing move all binders... Done. Doing remove assignments of findcond... No change. Doing merge branches... No change. Proof of (one-session) secrecy of keyA failed: keyA is defined from r_9; at 460, bad usage(s) of r_9. Proof of (one-session) secrecy of keyB failed: keyB is defined from r_7; at 414, bad usage(s) of r_7. Applied collision new x_1: Z; new y_1: Z; forall Y: G; return((exp(g, mult(x_1, y_1)) = Y)) <=(PCollKey2)=> return(false) if (Y independent-of x_1 || Y independent-of y_1) with y_1 -> b[i2_5512], x_1 -> a[i2_5511], Y -> exp(g, mult(b[i2_5510], a[iA_8])) Probability: PCollKey2 * NB * NA * NA * NB Applied collision new x_1: Z; forall Y: G; return((exp(g, x_1) = Y)) <=(PCollKey1)=> return(false) if Y independent-of x_1 with x_1 -> a[iA_7], Y -> exp(g, a[iA_6]) Probability: PCollKey1 * NA * NA Proved query inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB Probability: NB^2 * NA^2 * PCollKey2 + NA^2 * PCollKey1 Trying equivalence uf_cma(sign)... Failed. Trying equivalence rom(h)... Failed. Trying equivalence cdh(exp)... Failed. Doing SA rename gab... Done. Doing remove assignments of findcond... No change. Doing simplify... Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 680, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 548, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Run simplify 2 time(s). Fixpoint reached. Done. Doing SA rename gab_1... Done. Doing remove assignments of findcond... Done. Doing simplify... Doing global dependency analysis on b inside simplify... At 618, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Applied collision new x_1: Z; forall Y: G; return((exp(g, x_1) = Y)) <=(PCollKey1)=> return(false) if Y independent-of x_1 with x_1 -> a[i2_6995], Y -> exp(g, a[i2_6993]) Probability: PCollKey1 * NA * NA Applied collision new x_1: Z; new y_1: Z; forall Y: G; return((exp(g, mult(x_1, y_1)) = Y)) <=(PCollKey2)=> return(false) if (Y independent-of x_1 || Y independent-of y_1) with y_1 -> a[i2_6872], x_1 -> b, Y -> exp(g, mult(a[i2_6874], b[ri_16])) Probability: PCollKey2 * NA * NB * NB * NA Doing global dependency analysis on b inside simplify... At 548, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Run simplify 2 time(s). Maximum reached. Done. Trying equivalence cdh(exp) with b, a... Failed. Doing remove assignments of binder gab_2... Done. Doing remove assignments of binder gab_5... Done. Doing remove assignments of binder gab_7... Done. Trying equivalence cdh(exp) with b, a... Transf. OK Proba. computed Transf. done Succeeded. Doing simplify (non-expanded game)... Done. Doing expand... Done. Doing remove assignments of findcond... Done. Doing simplify... Doing global dependency analysis on a inside simplify... At 24, output message (A, hostB, ga) depends on a. No change Doing global dependency analysis on b inside simplify... At 326, output message (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3)) depends on b. No change Run simplify 1 time(s). Fixpoint reached. No change. Doing move all binders... No change. Doing remove assignments of findcond... No change. Doing merge branches... No change. Proved one-session secrecy of keyA Proved secrecy of keyA Proved one-session secrecy of keyB Proved secrecy of keyB ===================== Proof starts ======================= Initial state Game 1 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); get keys(=hostB, pkhostB: pkey) in if check(concatB(A, hostB, ga, gb_1), pkhostB, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); out(cA4[iA], (let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; sign_r(m_2, skA, r_2))); in(cA5[iA], ()); if hostB = B then ( let keyA: D = kA ) else out(cA6[iA], kA) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); out(cB2[iB], (hostA, B, gb_2, (let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; sign_r(m_3, skB, r_3)))); in(cB3[iB], s_3: signature); get keys(=hostA, pkhostA: pkey) in if check(concatA(hostA, B, ga_1, gb_2), pkhostA, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); if hostA = A then ( let keyB: D = kB ) else out(cB4[iB], kB) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then insert keys(B, pkB) else if Khost = A then insert keys(A, pkA) else insert keys(Khost, Kkey) )) Applying expand get, insert and prove unique annotations - Expand get/insert for table keys yields Game 2 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7], keys_6[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_6[u_6], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); out(cA4[iA], (let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; sign_r(m_2, skA, r_2))); in(cA5[iA], ()); {111} if hostB = B then ( let keyA: D = kA ) else out(cA6[iA], kA) ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9], keys_4[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_4[u_8], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); out(cA4[iA], (let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; sign_r(m_2, skA, r_2))); in(cA5[iA], ()); {193} if hostB = B then ( let keyA: D = kA ) else out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(keys_1[u_11], keys_2[u_11]) && (keys_1[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_2[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); out(cA4[iA], (let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; sign_r(m_2, skA, r_2))); in(cA5[iA], ()); {275} if hostB = B then ( let keyA: D = kA ) else out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); out(cB2[iB], (hostA, B, gb_2, (let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; sign_r(m_3, skB, r_3)))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1], keys_6[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_6[u], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); {387} if hostA = A then ( let keyB: D = kB ) else out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3], keys_4[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_4[u_2], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); {449} if hostA = A then ( let keyB: D = kB ) else out(cB4[iB], kB) ) orfind u_4 = u_5 <= NK suchthat defined(keys_1[u_5], keys_2[u_5]) && (keys_1[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_2[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); {511} if hostA = A then ( let keyB: D = kB ) else out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B in let keys_6: pkey = pkB ) else if Khost = A then ( let keys_3: host = A in let keys_4: pkey = pkA ) else let keys_1: host = Khost in let keys_2: pkey = Kkey )) Applying expand - Expand if/find/let - Test at 511 always false - Test at 449 always true - Test at 387 always false - Test at 275 always false - Test at 193 always false - Test at 111 always true yields Game 3 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7], keys_6[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_6[u_6], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9], keys_4[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_4[u_8], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(keys_1[u_11], keys_2[u_11]) && (keys_1[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), keys_2[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1], keys_6[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_6[u], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3], keys_4[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_4[u_2], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(keys_1[u_5], keys_2[u_5]) && (keys_1[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), keys_2[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B in let keys_6: pkey = pkB ) else if Khost = A then ( let keys_3: host = A in let keys_4: pkey = pkA ) else let keys_1: host = Khost in let keys_2: pkey = Kkey )) Applying remove assignments of findcond - Remove assignments on keys_1 (definition point kept, all usages removed) - Remove assignments on keys_2 (definition removed, all usages removed) - Remove assignments on keys_4 (definition removed, all usages removed) - Remove assignments on keys_6 (definition removed, all usages removed) yields Game 4 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); {46} find u_6 = u_7 <= NK suchthat defined(pkB, keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(pkA, keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); {310} find u = u_1 <= NK suchthat defined(pkB, keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(pkA, keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Replaced defined condition pkA, keys_3[u_3] with keys_3[u_3] in find at 310 - Replaced defined condition pkB, keys_5[u_1] with keys_5[u_1] in find at 310 - Replaced defined condition pkA, keys_3[u_9] with keys_3[u_9] in find at 46 - Replaced defined condition pkB, keys_5[u_7] with keys_5[u_7] in find at 46 yields Game 5 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_2: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_2)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Rename variable r_2 into r_6, r_5, r_4 yields Game 6 is in(start, ()); new hk_1: hashkey; new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = h(hk_1, gab) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = h(hk_1, gab_1) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], h(hk_1, x1)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying equivalence rom(h) - Equivalence rom(h) with variables: hk_1 -> hk_2 yields Game 7 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let kA: D = (let x_O: G = gab in find [unique] u_46 = ri_34 <= NA suchthat defined(x_O[ri_34], r_7[ri_34]) && (x_O = x_O[ri_34]) then r_7[u_46] orfind u_45 = ri_33 <= NA suchthat defined(x_O_1[ri_33], r_8[ri_33]) && (x_O = x_O_1[ri_33]) then r_8[u_45] orfind u_44 = ri_32 <= NA suchthat defined(x_O_2[ri_32], r_9[ri_32]) && (x_O = x_O_2[ri_32]) then r_9[u_44] orfind u_43 = ri_31 <= NB suchthat defined(x_O_3[ri_31], r_10[ri_31]) && (x_O = x_O_3[ri_31]) then r_10[u_43] orfind u_42 = ri_30 <= NB suchthat defined(x_O_4[ri_30], r_11[ri_30]) && (x_O = x_O_4[ri_30]) then r_11[u_42] orfind u_41 = ri_29 <= NB suchthat defined(x_O_5[ri_29], r_12[ri_29]) && (x_O = x_O_5[ri_29]) then r_12[u_41] orfind u_40 = ri_28 <= qH suchthat defined(x_O_6[ri_28], r_13[ri_28]) && (x_O = x_O_6[ri_28]) then r_13[u_40] else new r_7: D; r_7) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let kA: D = (let x_O_1: G = gab in find [unique] u_53 = ri_41 <= NA suchthat defined(x_O[ri_41], r_7[ri_41]) && (x_O_1 = x_O[ri_41]) then r_7[u_53] orfind u_52 = ri_40 <= NA suchthat defined(x_O_1[ri_40], r_8[ri_40]) && (x_O_1 = x_O_1[ri_40]) then r_8[u_52] orfind u_51 = ri_39 <= NA suchthat defined(x_O_2[ri_39], r_9[ri_39]) && (x_O_1 = x_O_2[ri_39]) then r_9[u_51] orfind u_50 = ri_38 <= NB suchthat defined(x_O_3[ri_38], r_10[ri_38]) && (x_O_1 = x_O_3[ri_38]) then r_10[u_50] orfind u_49 = ri_37 <= NB suchthat defined(x_O_4[ri_37], r_11[ri_37]) && (x_O_1 = x_O_4[ri_37]) then r_11[u_49] orfind u_48 = ri_36 <= NB suchthat defined(x_O_5[ri_36], r_12[ri_36]) && (x_O_1 = x_O_5[ri_36]) then r_12[u_48] orfind u_47 = ri_35 <= qH suchthat defined(x_O_6[ri_35], r_13[ri_35]) && (x_O_1 = x_O_6[ri_35]) then r_13[u_47] else new r_8: D; r_8) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let kA: D = (let x_O_2: G = gab in find [unique] u_60 = ri_48 <= NA suchthat defined(x_O[ri_48], r_7[ri_48]) && (x_O_2 = x_O[ri_48]) then r_7[u_60] orfind u_59 = ri_47 <= NA suchthat defined(x_O_1[ri_47], r_8[ri_47]) && (x_O_2 = x_O_1[ri_47]) then r_8[u_59] orfind u_58 = ri_46 <= NA suchthat defined(x_O_2[ri_46], r_9[ri_46]) && (x_O_2 = x_O_2[ri_46]) then r_9[u_58] orfind u_57 = ri_45 <= NB suchthat defined(x_O_3[ri_45], r_10[ri_45]) && (x_O_2 = x_O_3[ri_45]) then r_10[u_57] orfind u_56 = ri_44 <= NB suchthat defined(x_O_4[ri_44], r_11[ri_44]) && (x_O_2 = x_O_4[ri_44]) then r_11[u_56] orfind u_55 = ri_43 <= NB suchthat defined(x_O_5[ri_43], r_12[ri_43]) && (x_O_2 = x_O_5[ri_43]) then r_12[u_55] orfind u_54 = ri_42 <= qH suchthat defined(x_O_6[ri_42], r_13[ri_42]) && (x_O_2 = x_O_6[ri_42]) then r_13[u_54] else new r_9: D; r_9) in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = (let x_O_3: G = gab_1 in find [unique] u_25 = ri_13 <= NA suchthat defined(x_O[ri_13], r_7[ri_13]) && (x_O_3 = x_O[ri_13]) then r_7[u_25] orfind u_24 = ri_12 <= NA suchthat defined(x_O_1[ri_12], r_8[ri_12]) && (x_O_3 = x_O_1[ri_12]) then r_8[u_24] orfind u_23 = ri_11 <= NA suchthat defined(x_O_2[ri_11], r_9[ri_11]) && (x_O_3 = x_O_2[ri_11]) then r_9[u_23] orfind u_22 = ri_10 <= NB suchthat defined(x_O_3[ri_10], r_10[ri_10]) && (x_O_3 = x_O_3[ri_10]) then r_10[u_22] orfind u_21 = ri_9 <= NB suchthat defined(x_O_4[ri_9], r_11[ri_9]) && (x_O_3 = x_O_4[ri_9]) then r_11[u_21] orfind u_20 = ri_8 <= NB suchthat defined(x_O_5[ri_8], r_12[ri_8]) && (x_O_3 = x_O_5[ri_8]) then r_12[u_20] orfind u_19 = ri_7 <= qH suchthat defined(x_O_6[ri_7], r_13[ri_7]) && (x_O_3 = x_O_6[ri_7]) then r_13[u_19] else new r_10: D; r_10) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = (let x_O_4: G = gab_1 in find [unique] u_32 = ri_20 <= NA suchthat defined(x_O[ri_20], r_7[ri_20]) && (x_O_4 = x_O[ri_20]) then r_7[u_32] orfind u_31 = ri_19 <= NA suchthat defined(x_O_1[ri_19], r_8[ri_19]) && (x_O_4 = x_O_1[ri_19]) then r_8[u_31] orfind u_30 = ri_18 <= NA suchthat defined(x_O_2[ri_18], r_9[ri_18]) && (x_O_4 = x_O_2[ri_18]) then r_9[u_30] orfind u_29 = ri_17 <= NB suchthat defined(x_O_3[ri_17], r_10[ri_17]) && (x_O_4 = x_O_3[ri_17]) then r_10[u_29] orfind u_28 = ri_16 <= NB suchthat defined(x_O_4[ri_16], r_11[ri_16]) && (x_O_4 = x_O_4[ri_16]) then r_11[u_28] orfind u_27 = ri_15 <= NB suchthat defined(x_O_5[ri_15], r_12[ri_15]) && (x_O_4 = x_O_5[ri_15]) then r_12[u_27] orfind u_26 = ri_14 <= qH suchthat defined(x_O_6[ri_14], r_13[ri_14]) && (x_O_4 = x_O_6[ri_14]) then r_13[u_26] else new r_11: D; r_11) in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let kB: D = (let x_O_5: G = gab_1 in find [unique] u_39 = ri_27 <= NA suchthat defined(x_O[ri_27], r_7[ri_27]) && (x_O_5 = x_O[ri_27]) then r_7[u_39] orfind u_38 = ri_26 <= NA suchthat defined(x_O_1[ri_26], r_8[ri_26]) && (x_O_5 = x_O_1[ri_26]) then r_8[u_38] orfind u_37 = ri_25 <= NA suchthat defined(x_O_2[ri_25], r_9[ri_25]) && (x_O_5 = x_O_2[ri_25]) then r_9[u_37] orfind u_36 = ri_24 <= NB suchthat defined(x_O_3[ri_24], r_10[ri_24]) && (x_O_5 = x_O_3[ri_24]) then r_10[u_36] orfind u_35 = ri_23 <= NB suchthat defined(x_O_4[ri_23], r_11[ri_23]) && (x_O_5 = x_O_4[ri_23]) then r_11[u_35] orfind u_34 = ri_22 <= NB suchthat defined(x_O_5[ri_22], r_12[ri_22]) && (x_O_5 = x_O_5[ri_22]) then r_12[u_34] orfind u_33 = ri_21 <= qH suchthat defined(x_O_6[ri_21], r_13[ri_21]) && (x_O_5 = x_O_6[ri_21]) then r_13[u_33] else new r_12: D; r_12) in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); out(ch2[iH], (let x_O_6: G = x1 in find [unique] u_18 = ri_6 <= NA suchthat defined(x_O[ri_6], r_7[ri_6]) && (x_O_6 = x_O[ri_6]) then r_7[u_18] orfind u_17 = ri_5 <= NA suchthat defined(x_O_1[ri_5], r_8[ri_5]) && (x_O_6 = x_O_1[ri_5]) then r_8[u_17] orfind u_16 = ri_4 <= NA suchthat defined(x_O_2[ri_4], r_9[ri_4]) && (x_O_6 = x_O_2[ri_4]) then r_9[u_16] orfind u_15 = ri_3 <= NB suchthat defined(x_O_3[ri_3], r_10[ri_3]) && (x_O_6 = x_O_3[ri_3]) then r_10[u_15] orfind u_14 = ri_2 <= NB suchthat defined(x_O_4[ri_2], r_11[ri_2]) && (x_O_6 = x_O_4[ri_2]) then r_11[u_14] orfind u_13 = ri_1 <= NB suchthat defined(x_O_5[ri_1], r_12[ri_1]) && (x_O_6 = x_O_5[ri_1]) then r_12[u_13] orfind u_12 = ri <= qH suchthat defined(x_O_6[ri], r_13[ri]) && (x_O_6 = x_O_6[ri]) then r_13[u_12] else new r_13: D; r_13)) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying expand - Expand if/find/let yields Game 8 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let x_O: G = gab in find [unique] u_46 = ri_34 <= NA suchthat defined(x_O[ri_34], r_7[ri_34]) && (x_O = x_O[ri_34]) then ( let kA: D = r_7[u_46] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_45 = ri_33 <= NA suchthat defined(x_O_1[ri_33], r_8[ri_33]) && (x_O = x_O_1[ri_33]) then ( let kA: D = r_8[u_45] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_44 = ri_32 <= NA suchthat defined(x_O_2[ri_32], r_9[ri_32]) && (x_O = x_O_2[ri_32]) then ( let kA: D = r_9[u_44] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_43 = ri_31 <= NB suchthat defined(x_O_3[ri_31], r_10[ri_31]) && (x_O = x_O_3[ri_31]) then ( let kA: D = r_10[u_43] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_42 = ri_30 <= NB suchthat defined(x_O_4[ri_30], r_11[ri_30]) && (x_O = x_O_4[ri_30]) then ( let kA: D = r_11[u_42] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_41 = ri_29 <= NB suchthat defined(x_O_5[ri_29], r_12[ri_29]) && (x_O = x_O_5[ri_29]) then ( let kA: D = r_12[u_41] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_40 = ri_28 <= qH suchthat defined(x_O_6[ri_28], r_13[ri_28]) && (x_O = x_O_6[ri_28]) then ( let kA: D = r_13[u_40] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) else new r_7: D; let kA: D = r_7 in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = kA ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let x_O_1: G = gab in find [unique] u_53 = ri_41 <= NA suchthat defined(x_O[ri_41], r_7[ri_41]) && (x_O_1 = x_O[ri_41]) then ( let kA: D = r_7[u_53] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_52 = ri_40 <= NA suchthat defined(x_O_1[ri_40], r_8[ri_40]) && (x_O_1 = x_O_1[ri_40]) then ( let kA: D = r_8[u_52] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_51 = ri_39 <= NA suchthat defined(x_O_2[ri_39], r_9[ri_39]) && (x_O_1 = x_O_2[ri_39]) then ( let kA: D = r_9[u_51] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_50 = ri_38 <= NB suchthat defined(x_O_3[ri_38], r_10[ri_38]) && (x_O_1 = x_O_3[ri_38]) then ( let kA: D = r_10[u_50] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_49 = ri_37 <= NB suchthat defined(x_O_4[ri_37], r_11[ri_37]) && (x_O_1 = x_O_4[ri_37]) then ( let kA: D = r_11[u_49] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_48 = ri_36 <= NB suchthat defined(x_O_5[ri_36], r_12[ri_36]) && (x_O_1 = x_O_5[ri_36]) then ( let kA: D = r_12[u_48] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_47 = ri_35 <= qH suchthat defined(x_O_6[ri_35], r_13[ri_35]) && (x_O_1 = x_O_6[ri_35]) then ( let kA: D = r_13[u_47] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) else new r_8: D; let kA: D = r_8 in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let x_O_2: G = gab in find [unique] u_60 = ri_48 <= NA suchthat defined(x_O[ri_48], r_7[ri_48]) && (x_O_2 = x_O[ri_48]) then ( let kA: D = r_7[u_60] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_59 = ri_47 <= NA suchthat defined(x_O_1[ri_47], r_8[ri_47]) && (x_O_2 = x_O_1[ri_47]) then ( let kA: D = r_8[u_59] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_58 = ri_46 <= NA suchthat defined(x_O_2[ri_46], r_9[ri_46]) && (x_O_2 = x_O_2[ri_46]) then ( let kA: D = r_9[u_58] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_57 = ri_45 <= NB suchthat defined(x_O_3[ri_45], r_10[ri_45]) && (x_O_2 = x_O_3[ri_45]) then ( let kA: D = r_10[u_57] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_56 = ri_44 <= NB suchthat defined(x_O_4[ri_44], r_11[ri_44]) && (x_O_2 = x_O_4[ri_44]) then ( let kA: D = r_11[u_56] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_55 = ri_43 <= NB suchthat defined(x_O_5[ri_43], r_12[ri_43]) && (x_O_2 = x_O_5[ri_43]) then ( let kA: D = r_12[u_55] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) orfind u_54 = ri_42 <= qH suchthat defined(x_O_6[ri_42], r_13[ri_42]) && (x_O_2 = x_O_6[ri_42]) then ( let kA: D = r_13[u_54] in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) else new r_9: D; let kA: D = r_9 in event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], kA) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_3: G = gab_1 in find [unique] u_25 = ri_13 <= NA suchthat defined(x_O[ri_13], r_7[ri_13]) && (x_O_3 = x_O[ri_13]) then ( let kB: D = r_7[u_25] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_24 = ri_12 <= NA suchthat defined(x_O_1[ri_12], r_8[ri_12]) && (x_O_3 = x_O_1[ri_12]) then ( let kB: D = r_8[u_24] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_23 = ri_11 <= NA suchthat defined(x_O_2[ri_11], r_9[ri_11]) && (x_O_3 = x_O_2[ri_11]) then ( let kB: D = r_9[u_23] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_22 = ri_10 <= NB suchthat defined(x_O_3[ri_10], r_10[ri_10]) && (x_O_3 = x_O_3[ri_10]) then ( let kB: D = r_10[u_22] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_21 = ri_9 <= NB suchthat defined(x_O_4[ri_9], r_11[ri_9]) && (x_O_3 = x_O_4[ri_9]) then ( let kB: D = r_11[u_21] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_20 = ri_8 <= NB suchthat defined(x_O_5[ri_8], r_12[ri_8]) && (x_O_3 = x_O_5[ri_8]) then ( let kB: D = r_12[u_20] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_19 = ri_7 <= qH suchthat defined(x_O_6[ri_7], r_13[ri_7]) && (x_O_3 = x_O_6[ri_7]) then ( let kB: D = r_13[u_19] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) else new r_10: D; let kB: D = r_10 in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_4: G = gab_1 in find [unique] u_32 = ri_20 <= NA suchthat defined(x_O[ri_20], r_7[ri_20]) && (x_O_4 = x_O[ri_20]) then ( let kB: D = r_7[u_32] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_31 = ri_19 <= NA suchthat defined(x_O_1[ri_19], r_8[ri_19]) && (x_O_4 = x_O_1[ri_19]) then ( let kB: D = r_8[u_31] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_30 = ri_18 <= NA suchthat defined(x_O_2[ri_18], r_9[ri_18]) && (x_O_4 = x_O_2[ri_18]) then ( let kB: D = r_9[u_30] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_29 = ri_17 <= NB suchthat defined(x_O_3[ri_17], r_10[ri_17]) && (x_O_4 = x_O_3[ri_17]) then ( let kB: D = r_10[u_29] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_28 = ri_16 <= NB suchthat defined(x_O_4[ri_16], r_11[ri_16]) && (x_O_4 = x_O_4[ri_16]) then ( let kB: D = r_11[u_28] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_27 = ri_15 <= NB suchthat defined(x_O_5[ri_15], r_12[ri_15]) && (x_O_4 = x_O_5[ri_15]) then ( let kB: D = r_12[u_27] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_26 = ri_14 <= qH suchthat defined(x_O_6[ri_14], r_13[ri_14]) && (x_O_4 = x_O_6[ri_14]) then ( let kB: D = r_13[u_26] in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) else new r_11: D; let kB: D = r_11 in event endB(hostA, B, ga_1, gb_2); let keyB: D = kB ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let x_O_5: G = gab_1 in find [unique] u_39 = ri_27 <= NA suchthat defined(x_O[ri_27], r_7[ri_27]) && (x_O_5 = x_O[ri_27]) then ( let kB: D = r_7[u_39] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_38 = ri_26 <= NA suchthat defined(x_O_1[ri_26], r_8[ri_26]) && (x_O_5 = x_O_1[ri_26]) then ( let kB: D = r_8[u_38] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_37 = ri_25 <= NA suchthat defined(x_O_2[ri_25], r_9[ri_25]) && (x_O_5 = x_O_2[ri_25]) then ( let kB: D = r_9[u_37] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_36 = ri_24 <= NB suchthat defined(x_O_3[ri_24], r_10[ri_24]) && (x_O_5 = x_O_3[ri_24]) then ( let kB: D = r_10[u_36] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_35 = ri_23 <= NB suchthat defined(x_O_4[ri_23], r_11[ri_23]) && (x_O_5 = x_O_4[ri_23]) then ( let kB: D = r_11[u_35] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_34 = ri_22 <= NB suchthat defined(x_O_5[ri_22], r_12[ri_22]) && (x_O_5 = x_O_5[ri_22]) then ( let kB: D = r_12[u_34] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) orfind u_33 = ri_21 <= qH suchthat defined(x_O_6[ri_21], r_13[ri_21]) && (x_O_5 = x_O_6[ri_21]) then ( let kB: D = r_13[u_33] in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) else new r_12: D; let kB: D = r_12 in event endB(hostA, B, ga_1, gb_2); out(cB4[iB], kB) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); let x_O_6: G = x1 in find [unique] u_18 = ri_6 <= NA suchthat defined(x_O[ri_6], r_7[ri_6]) && (x_O_6 = x_O[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(x_O_1[ri_5], r_8[ri_5]) && (x_O_6 = x_O_1[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(x_O_2[ri_4], r_9[ri_4]) && (x_O_6 = x_O_2[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(x_O_3[ri_3], r_10[ri_3]) && (x_O_6 = x_O_3[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(x_O_4[ri_2], r_11[ri_2]) && (x_O_6 = x_O_4[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(x_O_5[ri_1], r_12[ri_1]) && (x_O_6 = x_O_5[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(x_O_6[ri], r_13[ri]) && (x_O_6 = x_O_6[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on x_O_6 (definition point kept, all usages removed) - Remove assignments on x_O_3 (definition point kept, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on x_O_4 (definition point kept, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on x_O_5 (definition point kept, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on kB (definition removed, all usages removed) - Remove assignments on x_O (definition point kept, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on x_O_1 (definition point kept, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on x_O_2 (definition point kept, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) - Remove assignments on kA (definition removed, all usages removed) yields Game 9 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let x_O: G = cst_G in {73} find [unique] u_46 = ri_34 <= NA suchthat defined(gab[ri_34], x_O[ri_34], r_7[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(gab[ri_33], x_O_1[ri_33], r_8[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(gab[ri_32], x_O_2[ri_32], r_9[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(gab_1[ri_31], x_O_3[ri_31], r_10[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(gab_1[ri_30], x_O_4[ri_30], r_11[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(gab_1[ri_29], x_O_5[ri_29], r_12[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(x1[ri_28], x_O_6[ri_28], r_13[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let x_O_1: G = cst_G in {464} find [unique] u_53 = ri_41 <= NA suchthat defined(gab[ri_41], x_O[ri_41], r_7[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(gab[ri_40], x_O_1[ri_40], r_8[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(gab[ri_39], x_O_2[ri_39], r_9[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(gab_1[ri_38], x_O_3[ri_38], r_10[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(gab_1[ri_37], x_O_4[ri_37], r_11[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(gab_1[ri_36], x_O_5[ri_36], r_12[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(x1[ri_35], x_O_6[ri_35], r_13[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let x_O_2: G = cst_G in {859} find [unique] u_60 = ri_48 <= NA suchthat defined(gab[ri_48], x_O[ri_48], r_7[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(gab[ri_47], x_O_1[ri_47], r_8[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(gab[ri_46], x_O_2[ri_46], r_9[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(gab_1[ri_45], x_O_3[ri_45], r_10[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(gab_1[ri_44], x_O_4[ri_44], r_11[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(gab_1[ri_43], x_O_5[ri_43], r_12[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(x1[ri_42], x_O_6[ri_42], r_13[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_3: G = cst_G in {1300} find [unique] u_25 = ri_13 <= NA suchthat defined(gab[ri_13], x_O[ri_13], r_7[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(gab[ri_12], x_O_1[ri_12], r_8[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(gab[ri_11], x_O_2[ri_11], r_9[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(gab_1[ri_10], x_O_3[ri_10], r_10[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(gab_1[ri_9], x_O_4[ri_9], r_11[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(gab_1[ri_8], x_O_5[ri_8], r_12[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(x1[ri_7], x_O_6[ri_7], r_13[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_4: G = cst_G in {1523} find [unique] u_32 = ri_20 <= NA suchthat defined(gab[ri_20], x_O[ri_20], r_7[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(gab[ri_19], x_O_1[ri_19], r_8[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(gab[ri_18], x_O_2[ri_18], r_9[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(gab_1[ri_17], x_O_3[ri_17], r_10[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(gab_1[ri_16], x_O_4[ri_16], r_11[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(gab_1[ri_15], x_O_5[ri_15], r_12[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(x1[ri_14], x_O_6[ri_14], r_13[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let x_O_5: G = cst_G in {1750} find [unique] u_39 = ri_27 <= NA suchthat defined(gab[ri_27], x_O[ri_27], r_7[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(gab[ri_26], x_O_1[ri_26], r_8[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(gab[ri_25], x_O_2[ri_25], r_9[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(gab_1[ri_24], x_O_3[ri_24], r_10[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(gab_1[ri_23], x_O_4[ri_23], r_11[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(gab_1[ri_22], x_O_5[ri_22], r_12[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(x1[ri_21], x_O_6[ri_21], r_13[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); let x_O_6: G = cst_G in {1954} find [unique] u_18 = ri_6 <= NA suchthat defined(gab[ri_6], x_O[ri_6], r_7[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(gab[ri_5], x_O_1[ri_5], r_8[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(gab[ri_4], x_O_2[ri_4], r_9[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(gab_1[ri_3], x_O_3[ri_3], r_10[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(gab_1[ri_2], x_O_4[ri_2], r_11[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(gab_1[ri_1], x_O_5[ri_1], r_12[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(x1[ri], x_O_6[ri], r_13[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Replaced defined condition x1[ri], x_O_6[ri], r_13[ri] with r_13[ri], x1[ri] in find at 1954 - Replaced defined condition gab_1[ri_1], x_O_5[ri_1], r_12[ri_1] with r_12[ri_1], gab_1[ri_1] in find at 1954 - Replaced defined condition gab_1[ri_2], x_O_4[ri_2], r_11[ri_2] with r_11[ri_2], gab_1[ri_2] in find at 1954 - Replaced defined condition gab_1[ri_3], x_O_3[ri_3], r_10[ri_3] with r_10[ri_3], gab_1[ri_3] in find at 1954 - Replaced defined condition gab[ri_4], x_O_2[ri_4], r_9[ri_4] with r_9[ri_4], gab[ri_4] in find at 1954 - Replaced defined condition gab[ri_5], x_O_1[ri_5], r_8[ri_5] with r_8[ri_5], gab[ri_5] in find at 1954 - Replaced defined condition gab[ri_6], x_O[ri_6], r_7[ri_6] with r_7[ri_6], gab[ri_6] in find at 1954 - Replaced defined condition x1[ri_21], x_O_6[ri_21], r_13[ri_21] with r_13[ri_21], x1[ri_21] in find at 1750 - Replaced defined condition gab_1[ri_22], x_O_5[ri_22], r_12[ri_22] with r_12[ri_22], gab_1[ri_22] in find at 1750 - Replaced defined condition gab_1[ri_23], x_O_4[ri_23], r_11[ri_23] with r_11[ri_23], gab_1[ri_23] in find at 1750 - Replaced defined condition gab_1[ri_24], x_O_3[ri_24], r_10[ri_24] with r_10[ri_24], gab_1[ri_24] in find at 1750 - Replaced defined condition gab[ri_25], x_O_2[ri_25], r_9[ri_25] with r_9[ri_25], gab[ri_25] in find at 1750 - Replaced defined condition gab[ri_26], x_O_1[ri_26], r_8[ri_26] with r_8[ri_26], gab[ri_26] in find at 1750 - Replaced defined condition gab[ri_27], x_O[ri_27], r_7[ri_27] with r_7[ri_27], gab[ri_27] in find at 1750 - Replaced defined condition x1[ri_14], x_O_6[ri_14], r_13[ri_14] with r_13[ri_14], x1[ri_14] in find at 1523 - Replaced defined condition gab_1[ri_15], x_O_5[ri_15], r_12[ri_15] with r_12[ri_15], gab_1[ri_15] in find at 1523 - Replaced defined condition gab_1[ri_16], x_O_4[ri_16], r_11[ri_16] with r_11[ri_16], gab_1[ri_16] in find at 1523 - Replaced defined condition gab_1[ri_17], x_O_3[ri_17], r_10[ri_17] with r_10[ri_17], gab_1[ri_17] in find at 1523 - Replaced defined condition gab[ri_18], x_O_2[ri_18], r_9[ri_18] with r_9[ri_18], gab[ri_18] in find at 1523 - Replaced defined condition gab[ri_19], x_O_1[ri_19], r_8[ri_19] with r_8[ri_19], gab[ri_19] in find at 1523 - Replaced defined condition gab[ri_20], x_O[ri_20], r_7[ri_20] with r_7[ri_20], gab[ri_20] in find at 1523 - Replaced defined condition x1[ri_7], x_O_6[ri_7], r_13[ri_7] with r_13[ri_7], x1[ri_7] in find at 1300 - Replaced defined condition gab_1[ri_8], x_O_5[ri_8], r_12[ri_8] with r_12[ri_8], gab_1[ri_8] in find at 1300 - Replaced defined condition gab_1[ri_9], x_O_4[ri_9], r_11[ri_9] with r_11[ri_9], gab_1[ri_9] in find at 1300 - Replaced defined condition gab_1[ri_10], x_O_3[ri_10], r_10[ri_10] with r_10[ri_10], gab_1[ri_10] in find at 1300 - Replaced defined condition gab[ri_11], x_O_2[ri_11], r_9[ri_11] with r_9[ri_11], gab[ri_11] in find at 1300 - Replaced defined condition gab[ri_12], x_O_1[ri_12], r_8[ri_12] with r_8[ri_12], gab[ri_12] in find at 1300 - Replaced defined condition gab[ri_13], x_O[ri_13], r_7[ri_13] with r_7[ri_13], gab[ri_13] in find at 1300 - Replaced defined condition x1[ri_42], x_O_6[ri_42], r_13[ri_42] with r_13[ri_42], x1[ri_42] in find at 859 - Replaced defined condition gab_1[ri_43], x_O_5[ri_43], r_12[ri_43] with r_12[ri_43], gab_1[ri_43] in find at 859 - Replaced defined condition gab_1[ri_44], x_O_4[ri_44], r_11[ri_44] with r_11[ri_44], gab_1[ri_44] in find at 859 - Replaced defined condition gab_1[ri_45], x_O_3[ri_45], r_10[ri_45] with r_10[ri_45], gab_1[ri_45] in find at 859 - Replaced defined condition gab[ri_46], x_O_2[ri_46], r_9[ri_46] with r_9[ri_46], gab[ri_46] in find at 859 - Replaced defined condition gab[ri_47], x_O_1[ri_47], r_8[ri_47] with r_8[ri_47], gab[ri_47] in find at 859 - Replaced defined condition gab[ri_48], x_O[ri_48], r_7[ri_48] with r_7[ri_48], gab[ri_48] in find at 859 - Replaced defined condition x1[ri_35], x_O_6[ri_35], r_13[ri_35] with r_13[ri_35], x1[ri_35] in find at 464 - Replaced defined condition gab_1[ri_36], x_O_5[ri_36], r_12[ri_36] with r_12[ri_36], gab_1[ri_36] in find at 464 - Replaced defined condition gab_1[ri_37], x_O_4[ri_37], r_11[ri_37] with r_11[ri_37], gab_1[ri_37] in find at 464 - Replaced defined condition gab_1[ri_38], x_O_3[ri_38], r_10[ri_38] with r_10[ri_38], gab_1[ri_38] in find at 464 - Replaced defined condition gab[ri_39], x_O_2[ri_39], r_9[ri_39] with r_9[ri_39], gab[ri_39] in find at 464 - Replaced defined condition gab[ri_40], x_O_1[ri_40], r_8[ri_40] with r_8[ri_40], gab[ri_40] in find at 464 - Replaced defined condition gab[ri_41], x_O[ri_41], r_7[ri_41] with r_7[ri_41], gab[ri_41] in find at 464 - Replaced defined condition x1[ri_28], x_O_6[ri_28], r_13[ri_28] with r_13[ri_28], x1[ri_28] in find at 73 - Replaced defined condition gab_1[ri_29], x_O_5[ri_29], r_12[ri_29] with r_12[ri_29], gab_1[ri_29] in find at 73 - Replaced defined condition gab_1[ri_30], x_O_4[ri_30], r_11[ri_30] with r_11[ri_30], gab_1[ri_30] in find at 73 - Replaced defined condition gab_1[ri_31], x_O_3[ri_31], r_10[ri_31] with r_10[ri_31], gab_1[ri_31] in find at 73 - Replaced defined condition gab[ri_32], x_O_2[ri_32], r_9[ri_32] with r_9[ri_32], gab[ri_32] in find at 73 - Replaced defined condition gab[ri_33], x_O_1[ri_33], r_8[ri_33] with r_8[ri_33], gab[ri_33] in find at 73 - Replaced defined condition gab[ri_34], x_O[ri_34], r_7[ri_34] with r_7[ri_34], gab[ri_34] in find at 73 yields Game 10 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in let x_O: G = cst_G in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in let x_O_1: G = cst_G in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in let x_O_2: G = cst_G in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_3: G = cst_G in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in let x_O_4: G = cst_G in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in let x_O_5: G = cst_G in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); let x_O_6: G = cst_G in find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying move all binders - Move assignment to x_O_6 - Move assignment to x_O_3 - Move assignment to x_O_4 - Move assignment to x_O_5 - Move assignment to x_O - Move assignment to x_O_1 - Move assignment to x_O_2 yields Game 11 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_4: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_4)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_5: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_5)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_6: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_6)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Rename variable r_4 into r_21, r_20, r_19, r_18, r_17, r_16, r_15, r_14 - Rename variable r_5 into r_29, r_28, r_27, r_26, r_25, r_24, r_23, r_22 - Rename variable r_6 into r_37, r_36, r_35, r_34, r_33, r_32, r_31, r_30 yields Game 12 is in(start, ()); new rkA: keyseed; let skA: skey = skgen(rkA) in let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_16)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_23: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_23)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_24: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_24)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_25: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_25)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_26: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_26)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_27: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_27)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_28: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_28)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_29: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_29)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_22: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_22)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_32)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r(m_2, skA, r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder skA - Remove assignments on skA (definition removed, all usages removed) yields Game 13 is in(start, ()); new rkA: keyseed; let pkA: pkey = pkgen(rkA) in new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkA, pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_16)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkA, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_23: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_23)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_24: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_24)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_25: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_25)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_26: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_26)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_27: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_27)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_28: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_28)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_29: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_29)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_22: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_22)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_32)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkA, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder pkA - Remove assignments on pkA (definition removed, all usages removed) yields Game 14 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_16)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), pkgen(rkA), s_2) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_23: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_23)); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_24: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_24)); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_25: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_25)); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_26: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_26)); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_27: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_27)); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_28: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_28)); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_29: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_29)); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_22: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_22)); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if check(concatB(A, hostB, ga, gb_1), Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_32)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r(m_2, skgen(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), pkgen(rkA), s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if check(concatA(hostA, B, ga_1, gb_2), Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying equivalence uf_cma(sign) with r_14, rkA [probability Psign(time_1, NA)] - Equivalence uf_cma(sign) with variables: r_37 -> r2, r_36 -> r2, r_35 -> r2, r_34 -> r2, r_33 -> r2, r_32 -> r2, r_31 -> r2, r_30 -> r2, r_29 -> r2, r_28 -> r2, r_27 -> r2, r_26 -> r2, r_25 -> r2, r_24 -> r2, r_23 -> r2, r_22 -> r2, r_21 -> r2, r_20 -> r2, r_19 -> r2, r_18 -> r2, r_17 -> r2, r_16 -> r2, r_15 -> r2, rkA -> r, r_14 -> r2 yields Game 15 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if (let m_4: blocksize = concatB(A, hostB, ga, gb_1) in (let y: pkey = pkB in (let si: signature = s_2 in {62}find u_156 = ri_144 <= NA suchthat defined(x[ri_144]) && {64}((y = pkgen2(rkA)) && (m_4 = x[ri_144]) && check2(m_4, y, si)) then true orfind u_155 = ri_143 <= NA suchthat defined(x_1[ri_143]) && {85}((y = pkgen2(rkA)) && (m_4 = x_1[ri_143]) && check2(m_4, y, si)) then true orfind u_154 = ri_142 <= NA suchthat defined(x_2[ri_142]) && {106}((y = pkgen2(rkA)) && (m_4 = x_2[ri_142]) && check2(m_4, y, si)) then true orfind u_153 = ri_141 <= NA suchthat defined(x_3[ri_141]) && {127}((y = pkgen2(rkA)) && (m_4 = x_3[ri_141]) && check2(m_4, y, si)) then true orfind u_152 = ri_140 <= NA suchthat defined(x_4[ri_140]) && {148}((y = pkgen2(rkA)) && (m_4 = x_4[ri_140]) && check2(m_4, y, si)) then true orfind u_151 = ri_139 <= NA suchthat defined(x_5[ri_139]) && {169}((y = pkgen2(rkA)) && (m_4 = x_5[ri_139]) && check2(m_4, y, si)) then true orfind u_150 = ri_138 <= NA suchthat defined(x_6[ri_138]) && {190}((y = pkgen2(rkA)) && (m_4 = x_6[ri_138]) && check2(m_4, y, si)) then true orfind u_149 = ri_137 <= NA suchthat defined(x_7[ri_137]) && {211}((y = pkgen2(rkA)) && (m_4 = x_7[ri_137]) && check2(m_4, y, si)) then true orfind u_148 = ri_136 <= NA suchthat defined(x_8[ri_136]) && {232}((y = pkgen2(rkA)) && (m_4 = x_8[ri_136]) && check2(m_4, y, si)) then true orfind u_147 = ri_135 <= NA suchthat defined(x_9[ri_135]) && {253}((y = pkgen2(rkA)) && (m_4 = x_9[ri_135]) && check2(m_4, y, si)) then true orfind u_146 = ri_134 <= NA suchthat defined(x_10[ri_134]) && {274}((y = pkgen2(rkA)) && (m_4 = x_10[ri_134]) && check2(m_4, y, si)) then true orfind u_145 = ri_133 <= NA suchthat defined(x_11[ri_133]) && {295}((y = pkgen2(rkA)) && (m_4 = x_11[ri_133]) && check2(m_4, y, si)) then true orfind u_144 = ri_132 <= NA suchthat defined(x_12[ri_132]) && {316}((y = pkgen2(rkA)) && (m_4 = x_12[ri_132]) && check2(m_4, y, si)) then true orfind u_143 = ri_131 <= NA suchthat defined(x_13[ri_131]) && {337}((y = pkgen2(rkA)) && (m_4 = x_13[ri_131]) && check2(m_4, y, si)) then true orfind u_142 = ri_130 <= NA suchthat defined(x_14[ri_130]) && {358}((y = pkgen2(rkA)) && (m_4 = x_14[ri_130]) && check2(m_4, y, si)) then true orfind u_141 = ri_129 <= NA suchthat defined(x_15[ri_129]) && {379}((y = pkgen2(rkA)) && (m_4 = x_15[ri_129]) && check2(m_4, y, si)) then true orfind u_140 = ri_128 <= NA suchthat defined(x_16[ri_128]) && {400}((y = pkgen2(rkA)) && (m_4 = x_16[ri_128]) && check2(m_4, y, si)) then true orfind u_139 = ri_127 <= NA suchthat defined(x_17[ri_127]) && {421}((y = pkgen2(rkA)) && (m_4 = x_17[ri_127]) && check2(m_4, y, si)) then true orfind u_138 = ri_126 <= NA suchthat defined(x_18[ri_126]) && {442}((y = pkgen2(rkA)) && (m_4 = x_18[ri_126]) && check2(m_4, y, si)) then true orfind u_137 = ri_125 <= NA suchthat defined(x_19[ri_125]) && {463}((y = pkgen2(rkA)) && (m_4 = x_19[ri_125]) && check2(m_4, y, si)) then true orfind u_136 = ri_124 <= NA suchthat defined(x_20[ri_124]) && {484}((y = pkgen2(rkA)) && (m_4 = x_20[ri_124]) && check2(m_4, y, si)) then true orfind u_135 = ri_123 <= NA suchthat defined(x_21[ri_123]) && {505}((y = pkgen2(rkA)) && (m_4 = x_21[ri_123]) && check2(m_4, y, si)) then true orfind u_134 = ri_122 <= NA suchthat defined(x_22[ri_122]) && {526}((y = pkgen2(rkA)) && (m_4 = x_22[ri_122]) && check2(m_4, y, si)) then true orfind u_133 = ri_121 <= NA suchthat defined(x_23[ri_121]) && {547}((y = pkgen2(rkA)) && (m_4 = x_23[ri_121]) && check2(m_4, y, si)) then true else {567}if {568}(y = pkgen2(rkA)) then false else check(m_4, y, si)))) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], (let x_1: blocksize = m_2 in sign_r2(x_1, skgen2(rkA), r_15))); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], (let x_2: blocksize = m_2 in sign_r2(x_2, skgen2(rkA), r_16))); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], (let x_3: blocksize = m_2 in sign_r2(x_3, skgen2(rkA), r_17))); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], (let x_4: blocksize = m_2 in sign_r2(x_4, skgen2(rkA), r_18))); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], (let x_5: blocksize = m_2 in sign_r2(x_5, skgen2(rkA), r_19))); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], (let x_6: blocksize = m_2 in sign_r2(x_6, skgen2(rkA), r_20))); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], (let x_7: blocksize = m_2 in sign_r2(x_7, skgen2(rkA), r_21))); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], (let x: blocksize = m_2 in sign_r2(x, skgen2(rkA), r_14))); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( if (let m1: blocksize = concatB(A, hostB, ga, gb_1) in (let si1: signature = s_2 in {994}find u_180 = ri_168 <= NA suchthat defined(x[ri_168]) && {996}((m1 = x[ri_168]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_179 = ri_167 <= NA suchthat defined(x_1[ri_167]) && {1011}((m1 = x_1[ri_167]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_178 = ri_166 <= NA suchthat defined(x_2[ri_166]) && {1026}((m1 = x_2[ri_166]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_177 = ri_165 <= NA suchthat defined(x_3[ri_165]) && {1041}((m1 = x_3[ri_165]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_176 = ri_164 <= NA suchthat defined(x_4[ri_164]) && {1056}((m1 = x_4[ri_164]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_175 = ri_163 <= NA suchthat defined(x_5[ri_163]) && {1071}((m1 = x_5[ri_163]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_174 = ri_162 <= NA suchthat defined(x_6[ri_162]) && {1086}((m1 = x_6[ri_162]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_173 = ri_161 <= NA suchthat defined(x_7[ri_161]) && {1101}((m1 = x_7[ri_161]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_172 = ri_160 <= NA suchthat defined(x_8[ri_160]) && {1116}((m1 = x_8[ri_160]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_171 = ri_159 <= NA suchthat defined(x_9[ri_159]) && {1131}((m1 = x_9[ri_159]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_170 = ri_158 <= NA suchthat defined(x_10[ri_158]) && {1146}((m1 = x_10[ri_158]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_169 = ri_157 <= NA suchthat defined(x_11[ri_157]) && {1161}((m1 = x_11[ri_157]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_168 = ri_156 <= NA suchthat defined(x_12[ri_156]) && {1176}((m1 = x_12[ri_156]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_167 = ri_155 <= NA suchthat defined(x_13[ri_155]) && {1191}((m1 = x_13[ri_155]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_166 = ri_154 <= NA suchthat defined(x_14[ri_154]) && {1206}((m1 = x_14[ri_154]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_165 = ri_153 <= NA suchthat defined(x_15[ri_153]) && {1221}((m1 = x_15[ri_153]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_164 = ri_152 <= NA suchthat defined(x_16[ri_152]) && {1236}((m1 = x_16[ri_152]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_163 = ri_151 <= NA suchthat defined(x_17[ri_151]) && {1251}((m1 = x_17[ri_151]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_162 = ri_150 <= NA suchthat defined(x_18[ri_150]) && {1266}((m1 = x_18[ri_150]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_161 = ri_149 <= NA suchthat defined(x_19[ri_149]) && {1281}((m1 = x_19[ri_149]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_160 = ri_148 <= NA suchthat defined(x_20[ri_148]) && {1296}((m1 = x_20[ri_148]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_159 = ri_147 <= NA suchthat defined(x_21[ri_147]) && {1311}((m1 = x_21[ri_147]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_158 = ri_146 <= NA suchthat defined(x_22[ri_146]) && {1326}((m1 = x_22[ri_146]) && check2(m1, pkgen2(rkA), si1)) then true orfind u_157 = ri_145 <= NA suchthat defined(x_23[ri_145]) && {1341}((m1 = x_23[ri_145]) && check2(m1, pkgen2(rkA), si1)) then true else false)) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_23: sign_seed; out(cA4[iA], (let x_9: blocksize = m_2 in sign_r2(x_9, skgen2(rkA), r_23))); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_24: sign_seed; out(cA4[iA], (let x_10: blocksize = m_2 in sign_r2(x_10, skgen2(rkA), r_24))); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_25: sign_seed; out(cA4[iA], (let x_11: blocksize = m_2 in sign_r2(x_11, skgen2(rkA), r_25))); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_26: sign_seed; out(cA4[iA], (let x_12: blocksize = m_2 in sign_r2(x_12, skgen2(rkA), r_26))); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_27: sign_seed; out(cA4[iA], (let x_13: blocksize = m_2 in sign_r2(x_13, skgen2(rkA), r_27))); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_28: sign_seed; out(cA4[iA], (let x_14: blocksize = m_2 in sign_r2(x_14, skgen2(rkA), r_28))); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_29: sign_seed; out(cA4[iA], (let x_15: blocksize = m_2 in sign_r2(x_15, skgen2(rkA), r_29))); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_22: sign_seed; out(cA4[iA], (let x_8: blocksize = m_2 in sign_r2(x_8, skgen2(rkA), r_22))); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if (let m_5: blocksize = concatB(A, hostB, ga, gb_1) in (let y_1: pkey = Kkey[u_10] in (let si_1: signature = s_2 in {1775}find u_204 = ri_192 <= NA suchthat defined(x[ri_192]) && {1777}((y_1 = pkgen2(rkA)) && (m_5 = x[ri_192]) && check2(m_5, y_1, si_1)) then true orfind u_203 = ri_191 <= NA suchthat defined(x_1[ri_191]) && {1798}((y_1 = pkgen2(rkA)) && (m_5 = x_1[ri_191]) && check2(m_5, y_1, si_1)) then true orfind u_202 = ri_190 <= NA suchthat defined(x_2[ri_190]) && {1819}((y_1 = pkgen2(rkA)) && (m_5 = x_2[ri_190]) && check2(m_5, y_1, si_1)) then true orfind u_201 = ri_189 <= NA suchthat defined(x_3[ri_189]) && {1840}((y_1 = pkgen2(rkA)) && (m_5 = x_3[ri_189]) && check2(m_5, y_1, si_1)) then true orfind u_200 = ri_188 <= NA suchthat defined(x_4[ri_188]) && {1861}((y_1 = pkgen2(rkA)) && (m_5 = x_4[ri_188]) && check2(m_5, y_1, si_1)) then true orfind u_199 = ri_187 <= NA suchthat defined(x_5[ri_187]) && {1882}((y_1 = pkgen2(rkA)) && (m_5 = x_5[ri_187]) && check2(m_5, y_1, si_1)) then true orfind u_198 = ri_186 <= NA suchthat defined(x_6[ri_186]) && {1903}((y_1 = pkgen2(rkA)) && (m_5 = x_6[ri_186]) && check2(m_5, y_1, si_1)) then true orfind u_197 = ri_185 <= NA suchthat defined(x_7[ri_185]) && {1924}((y_1 = pkgen2(rkA)) && (m_5 = x_7[ri_185]) && check2(m_5, y_1, si_1)) then true orfind u_196 = ri_184 <= NA suchthat defined(x_8[ri_184]) && {1945}((y_1 = pkgen2(rkA)) && (m_5 = x_8[ri_184]) && check2(m_5, y_1, si_1)) then true orfind u_195 = ri_183 <= NA suchthat defined(x_9[ri_183]) && {1966}((y_1 = pkgen2(rkA)) && (m_5 = x_9[ri_183]) && check2(m_5, y_1, si_1)) then true orfind u_194 = ri_182 <= NA suchthat defined(x_10[ri_182]) && {1987}((y_1 = pkgen2(rkA)) && (m_5 = x_10[ri_182]) && check2(m_5, y_1, si_1)) then true orfind u_193 = ri_181 <= NA suchthat defined(x_11[ri_181]) && {2008}((y_1 = pkgen2(rkA)) && (m_5 = x_11[ri_181]) && check2(m_5, y_1, si_1)) then true orfind u_192 = ri_180 <= NA suchthat defined(x_12[ri_180]) && {2029}((y_1 = pkgen2(rkA)) && (m_5 = x_12[ri_180]) && check2(m_5, y_1, si_1)) then true orfind u_191 = ri_179 <= NA suchthat defined(x_13[ri_179]) && {2050}((y_1 = pkgen2(rkA)) && (m_5 = x_13[ri_179]) && check2(m_5, y_1, si_1)) then true orfind u_190 = ri_178 <= NA suchthat defined(x_14[ri_178]) && {2071}((y_1 = pkgen2(rkA)) && (m_5 = x_14[ri_178]) && check2(m_5, y_1, si_1)) then true orfind u_189 = ri_177 <= NA suchthat defined(x_15[ri_177]) && {2092}((y_1 = pkgen2(rkA)) && (m_5 = x_15[ri_177]) && check2(m_5, y_1, si_1)) then true orfind u_188 = ri_176 <= NA suchthat defined(x_16[ri_176]) && {2113}((y_1 = pkgen2(rkA)) && (m_5 = x_16[ri_176]) && check2(m_5, y_1, si_1)) then true orfind u_187 = ri_175 <= NA suchthat defined(x_17[ri_175]) && {2134}((y_1 = pkgen2(rkA)) && (m_5 = x_17[ri_175]) && check2(m_5, y_1, si_1)) then true orfind u_186 = ri_174 <= NA suchthat defined(x_18[ri_174]) && {2155}((y_1 = pkgen2(rkA)) && (m_5 = x_18[ri_174]) && check2(m_5, y_1, si_1)) then true orfind u_185 = ri_173 <= NA suchthat defined(x_19[ri_173]) && {2176}((y_1 = pkgen2(rkA)) && (m_5 = x_19[ri_173]) && check2(m_5, y_1, si_1)) then true orfind u_184 = ri_172 <= NA suchthat defined(x_20[ri_172]) && {2197}((y_1 = pkgen2(rkA)) && (m_5 = x_20[ri_172]) && check2(m_5, y_1, si_1)) then true orfind u_183 = ri_171 <= NA suchthat defined(x_21[ri_171]) && {2218}((y_1 = pkgen2(rkA)) && (m_5 = x_21[ri_171]) && check2(m_5, y_1, si_1)) then true orfind u_182 = ri_170 <= NA suchthat defined(x_22[ri_170]) && {2239}((y_1 = pkgen2(rkA)) && (m_5 = x_22[ri_170]) && check2(m_5, y_1, si_1)) then true orfind u_181 = ri_169 <= NA suchthat defined(x_23[ri_169]) && {2260}((y_1 = pkgen2(rkA)) && (m_5 = x_23[ri_169]) && check2(m_5, y_1, si_1)) then true else if y_1 = pkgen2(rkA) then false else check(m_5, y_1, si_1)))) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], (let x_17: blocksize = m_2 in sign_r2(x_17, skgen2(rkA), r_31))); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], (let x_18: blocksize = m_2 in sign_r2(x_18, skgen2(rkA), r_32))); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], (let x_19: blocksize = m_2 in sign_r2(x_19, skgen2(rkA), r_33))); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], (let x_20: blocksize = m_2 in sign_r2(x_20, skgen2(rkA), r_34))); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], (let x_21: blocksize = m_2 in sign_r2(x_21, skgen2(rkA), r_35))); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], (let x_22: blocksize = m_2 in sign_r2(x_22, skgen2(rkA), r_36))); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], (let x_23: blocksize = m_2 in sign_r2(x_23, skgen2(rkA), r_37))); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], (let x_16: blocksize = m_2 in sign_r2(x_16, skgen2(rkA), r_30))); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if (let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in (let y_2: pkey = pkB in (let si_2: signature = s_3 in {2759}find u_84 = ri_72 <= NA suchthat defined(x[ri_72]) && {2761}((y_2 = pkgen2(rkA)) && (m_6 = x[ri_72]) && check2(m_6, y_2, si_2)) then true orfind u_83 = ri_71 <= NA suchthat defined(x_1[ri_71]) && {2782}((y_2 = pkgen2(rkA)) && (m_6 = x_1[ri_71]) && check2(m_6, y_2, si_2)) then true orfind u_82 = ri_70 <= NA suchthat defined(x_2[ri_70]) && {2803}((y_2 = pkgen2(rkA)) && (m_6 = x_2[ri_70]) && check2(m_6, y_2, si_2)) then true orfind u_81 = ri_69 <= NA suchthat defined(x_3[ri_69]) && {2824}((y_2 = pkgen2(rkA)) && (m_6 = x_3[ri_69]) && check2(m_6, y_2, si_2)) then true orfind u_80 = ri_68 <= NA suchthat defined(x_4[ri_68]) && {2845}((y_2 = pkgen2(rkA)) && (m_6 = x_4[ri_68]) && check2(m_6, y_2, si_2)) then true orfind u_79 = ri_67 <= NA suchthat defined(x_5[ri_67]) && {2866}((y_2 = pkgen2(rkA)) && (m_6 = x_5[ri_67]) && check2(m_6, y_2, si_2)) then true orfind u_78 = ri_66 <= NA suchthat defined(x_6[ri_66]) && {2887}((y_2 = pkgen2(rkA)) && (m_6 = x_6[ri_66]) && check2(m_6, y_2, si_2)) then true orfind u_77 = ri_65 <= NA suchthat defined(x_7[ri_65]) && {2908}((y_2 = pkgen2(rkA)) && (m_6 = x_7[ri_65]) && check2(m_6, y_2, si_2)) then true orfind u_76 = ri_64 <= NA suchthat defined(x_8[ri_64]) && {2929}((y_2 = pkgen2(rkA)) && (m_6 = x_8[ri_64]) && check2(m_6, y_2, si_2)) then true orfind u_75 = ri_63 <= NA suchthat defined(x_9[ri_63]) && {2950}((y_2 = pkgen2(rkA)) && (m_6 = x_9[ri_63]) && check2(m_6, y_2, si_2)) then true orfind u_74 = ri_62 <= NA suchthat defined(x_10[ri_62]) && {2971}((y_2 = pkgen2(rkA)) && (m_6 = x_10[ri_62]) && check2(m_6, y_2, si_2)) then true orfind u_73 = ri_61 <= NA suchthat defined(x_11[ri_61]) && {2992}((y_2 = pkgen2(rkA)) && (m_6 = x_11[ri_61]) && check2(m_6, y_2, si_2)) then true orfind u_72 = ri_60 <= NA suchthat defined(x_12[ri_60]) && {3013}((y_2 = pkgen2(rkA)) && (m_6 = x_12[ri_60]) && check2(m_6, y_2, si_2)) then true orfind u_71 = ri_59 <= NA suchthat defined(x_13[ri_59]) && {3034}((y_2 = pkgen2(rkA)) && (m_6 = x_13[ri_59]) && check2(m_6, y_2, si_2)) then true orfind u_70 = ri_58 <= NA suchthat defined(x_14[ri_58]) && {3055}((y_2 = pkgen2(rkA)) && (m_6 = x_14[ri_58]) && check2(m_6, y_2, si_2)) then true orfind u_69 = ri_57 <= NA suchthat defined(x_15[ri_57]) && {3076}((y_2 = pkgen2(rkA)) && (m_6 = x_15[ri_57]) && check2(m_6, y_2, si_2)) then true orfind u_68 = ri_56 <= NA suchthat defined(x_16[ri_56]) && {3097}((y_2 = pkgen2(rkA)) && (m_6 = x_16[ri_56]) && check2(m_6, y_2, si_2)) then true orfind u_67 = ri_55 <= NA suchthat defined(x_17[ri_55]) && {3118}((y_2 = pkgen2(rkA)) && (m_6 = x_17[ri_55]) && check2(m_6, y_2, si_2)) then true orfind u_66 = ri_54 <= NA suchthat defined(x_18[ri_54]) && {3139}((y_2 = pkgen2(rkA)) && (m_6 = x_18[ri_54]) && check2(m_6, y_2, si_2)) then true orfind u_65 = ri_53 <= NA suchthat defined(x_19[ri_53]) && {3160}((y_2 = pkgen2(rkA)) && (m_6 = x_19[ri_53]) && check2(m_6, y_2, si_2)) then true orfind u_64 = ri_52 <= NA suchthat defined(x_20[ri_52]) && {3181}((y_2 = pkgen2(rkA)) && (m_6 = x_20[ri_52]) && check2(m_6, y_2, si_2)) then true orfind u_63 = ri_51 <= NA suchthat defined(x_21[ri_51]) && {3202}((y_2 = pkgen2(rkA)) && (m_6 = x_21[ri_51]) && check2(m_6, y_2, si_2)) then true orfind u_62 = ri_50 <= NA suchthat defined(x_22[ri_50]) && {3223}((y_2 = pkgen2(rkA)) && (m_6 = x_22[ri_50]) && check2(m_6, y_2, si_2)) then true orfind u_61 = ri_49 <= NA suchthat defined(x_23[ri_49]) && {3244}((y_2 = pkgen2(rkA)) && (m_6 = x_23[ri_49]) && check2(m_6, y_2, si_2)) then true else {3264}if {3265}(y_2 = pkgen2(rkA)) then false else check(m_6, y_2, si_2)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( if (let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in (let si1_1: signature = s_3 in {3491}find u_108 = ri_96 <= NA suchthat defined(x[ri_96]) && (m1_1 = x[ri_96]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_107 = ri_95 <= NA suchthat defined(x_1[ri_95]) && (m1_1 = x_1[ri_95]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_106 = ri_94 <= NA suchthat defined(x_2[ri_94]) && (m1_1 = x_2[ri_94]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_105 = ri_93 <= NA suchthat defined(x_3[ri_93]) && (m1_1 = x_3[ri_93]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_104 = ri_92 <= NA suchthat defined(x_4[ri_92]) && (m1_1 = x_4[ri_92]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_103 = ri_91 <= NA suchthat defined(x_5[ri_91]) && (m1_1 = x_5[ri_91]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_102 = ri_90 <= NA suchthat defined(x_6[ri_90]) && (m1_1 = x_6[ri_90]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_101 = ri_89 <= NA suchthat defined(x_7[ri_89]) && (m1_1 = x_7[ri_89]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_100 = ri_88 <= NA suchthat defined(x_8[ri_88]) && {3613}((m1_1 = x_8[ri_88]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_99 = ri_87 <= NA suchthat defined(x_9[ri_87]) && {3628}((m1_1 = x_9[ri_87]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_98 = ri_86 <= NA suchthat defined(x_10[ri_86]) && {3643}((m1_1 = x_10[ri_86]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_97 = ri_85 <= NA suchthat defined(x_11[ri_85]) && {3658}((m1_1 = x_11[ri_85]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_96 = ri_84 <= NA suchthat defined(x_12[ri_84]) && {3673}((m1_1 = x_12[ri_84]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_95 = ri_83 <= NA suchthat defined(x_13[ri_83]) && {3688}((m1_1 = x_13[ri_83]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_94 = ri_82 <= NA suchthat defined(x_14[ri_82]) && {3703}((m1_1 = x_14[ri_82]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_93 = ri_81 <= NA suchthat defined(x_15[ri_81]) && {3718}((m1_1 = x_15[ri_81]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_92 = ri_80 <= NA suchthat defined(x_16[ri_80]) && {3733}((m1_1 = x_16[ri_80]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_91 = ri_79 <= NA suchthat defined(x_17[ri_79]) && {3748}((m1_1 = x_17[ri_79]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_90 = ri_78 <= NA suchthat defined(x_18[ri_78]) && {3763}((m1_1 = x_18[ri_78]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_89 = ri_77 <= NA suchthat defined(x_19[ri_77]) && {3778}((m1_1 = x_19[ri_77]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_88 = ri_76 <= NA suchthat defined(x_20[ri_76]) && {3793}((m1_1 = x_20[ri_76]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_87 = ri_75 <= NA suchthat defined(x_21[ri_75]) && {3808}((m1_1 = x_21[ri_75]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_86 = ri_74 <= NA suchthat defined(x_22[ri_74]) && {3823}((m1_1 = x_22[ri_74]) && check2(m1_1, pkgen2(rkA), si1_1)) then true orfind u_85 = ri_73 <= NA suchthat defined(x_23[ri_73]) && {3838}((m1_1 = x_23[ri_73]) && check2(m1_1, pkgen2(rkA), si1_1)) then true else false)) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if (let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in (let y_3: pkey = Kkey[u_4] in (let si_3: signature = s_3 in {4072}find u_132 = ri_120 <= NA suchthat defined(x[ri_120]) && {4074}((y_3 = pkgen2(rkA)) && (m_7 = x[ri_120]) && check2(m_7, y_3, si_3)) then true orfind u_131 = ri_119 <= NA suchthat defined(x_1[ri_119]) && {4095}((y_3 = pkgen2(rkA)) && (m_7 = x_1[ri_119]) && check2(m_7, y_3, si_3)) then true orfind u_130 = ri_118 <= NA suchthat defined(x_2[ri_118]) && {4116}((y_3 = pkgen2(rkA)) && (m_7 = x_2[ri_118]) && check2(m_7, y_3, si_3)) then true orfind u_129 = ri_117 <= NA suchthat defined(x_3[ri_117]) && {4137}((y_3 = pkgen2(rkA)) && (m_7 = x_3[ri_117]) && check2(m_7, y_3, si_3)) then true orfind u_128 = ri_116 <= NA suchthat defined(x_4[ri_116]) && {4158}((y_3 = pkgen2(rkA)) && (m_7 = x_4[ri_116]) && check2(m_7, y_3, si_3)) then true orfind u_127 = ri_115 <= NA suchthat defined(x_5[ri_115]) && {4179}((y_3 = pkgen2(rkA)) && (m_7 = x_5[ri_115]) && check2(m_7, y_3, si_3)) then true orfind u_126 = ri_114 <= NA suchthat defined(x_6[ri_114]) && {4200}((y_3 = pkgen2(rkA)) && (m_7 = x_6[ri_114]) && check2(m_7, y_3, si_3)) then true orfind u_125 = ri_113 <= NA suchthat defined(x_7[ri_113]) && {4221}((y_3 = pkgen2(rkA)) && (m_7 = x_7[ri_113]) && check2(m_7, y_3, si_3)) then true orfind u_124 = ri_112 <= NA suchthat defined(x_8[ri_112]) && {4242}((y_3 = pkgen2(rkA)) && (m_7 = x_8[ri_112]) && check2(m_7, y_3, si_3)) then true orfind u_123 = ri_111 <= NA suchthat defined(x_9[ri_111]) && {4263}((y_3 = pkgen2(rkA)) && (m_7 = x_9[ri_111]) && check2(m_7, y_3, si_3)) then true orfind u_122 = ri_110 <= NA suchthat defined(x_10[ri_110]) && {4284}((y_3 = pkgen2(rkA)) && (m_7 = x_10[ri_110]) && check2(m_7, y_3, si_3)) then true orfind u_121 = ri_109 <= NA suchthat defined(x_11[ri_109]) && {4305}((y_3 = pkgen2(rkA)) && (m_7 = x_11[ri_109]) && check2(m_7, y_3, si_3)) then true orfind u_120 = ri_108 <= NA suchthat defined(x_12[ri_108]) && {4326}((y_3 = pkgen2(rkA)) && (m_7 = x_12[ri_108]) && check2(m_7, y_3, si_3)) then true orfind u_119 = ri_107 <= NA suchthat defined(x_13[ri_107]) && {4347}((y_3 = pkgen2(rkA)) && (m_7 = x_13[ri_107]) && check2(m_7, y_3, si_3)) then true orfind u_118 = ri_106 <= NA suchthat defined(x_14[ri_106]) && {4368}((y_3 = pkgen2(rkA)) && (m_7 = x_14[ri_106]) && check2(m_7, y_3, si_3)) then true orfind u_117 = ri_105 <= NA suchthat defined(x_15[ri_105]) && {4389}((y_3 = pkgen2(rkA)) && (m_7 = x_15[ri_105]) && check2(m_7, y_3, si_3)) then true orfind u_116 = ri_104 <= NA suchthat defined(x_16[ri_104]) && {4410}((y_3 = pkgen2(rkA)) && (m_7 = x_16[ri_104]) && check2(m_7, y_3, si_3)) then true orfind u_115 = ri_103 <= NA suchthat defined(x_17[ri_103]) && {4431}((y_3 = pkgen2(rkA)) && (m_7 = x_17[ri_103]) && check2(m_7, y_3, si_3)) then true orfind u_114 = ri_102 <= NA suchthat defined(x_18[ri_102]) && {4452}((y_3 = pkgen2(rkA)) && (m_7 = x_18[ri_102]) && check2(m_7, y_3, si_3)) then true orfind u_113 = ri_101 <= NA suchthat defined(x_19[ri_101]) && {4473}((y_3 = pkgen2(rkA)) && (m_7 = x_19[ri_101]) && check2(m_7, y_3, si_3)) then true orfind u_112 = ri_100 <= NA suchthat defined(x_20[ri_100]) && {4494}((y_3 = pkgen2(rkA)) && (m_7 = x_20[ri_100]) && check2(m_7, y_3, si_3)) then true orfind u_111 = ri_99 <= NA suchthat defined(x_21[ri_99]) && {4515}((y_3 = pkgen2(rkA)) && (m_7 = x_21[ri_99]) && check2(m_7, y_3, si_3)) then true orfind u_110 = ri_98 <= NA suchthat defined(x_22[ri_98]) && {4536}((y_3 = pkgen2(rkA)) && (m_7 = x_22[ri_98]) && check2(m_7, y_3, si_3)) then true orfind u_109 = ri_97 <= NA suchthat defined(x_23[ri_97]) && {4557}((y_3 = pkgen2(rkA)) && (m_7 = x_23[ri_97]) && check2(m_7, y_3, si_3)) then true else if y_3 = pkgen2(rkA) then false else check(m_7, y_3, si_3)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify (non-expanded game) [probability Psigncoll] - Simplification pass - Replaced ((y = pkgen2(rkA)) && (m_4 = x_23[ri_121]) && check2(m_4, y, si)) with false at 547 - Remove branch 24 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_22[ri_122]) && check2(m_4, y, si)) with false at 526 - Remove branch 23 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_21[ri_123]) && check2(m_4, y, si)) with false at 505 - Remove branch 22 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_20[ri_124]) && check2(m_4, y, si)) with false at 484 - Remove branch 21 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_19[ri_125]) && check2(m_4, y, si)) with false at 463 - Remove branch 20 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_18[ri_126]) && check2(m_4, y, si)) with false at 442 - Remove branch 19 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_17[ri_127]) && check2(m_4, y, si)) with false at 421 - Remove branch 18 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_16[ri_128]) && check2(m_4, y, si)) with false at 400 - Remove branch 17 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_15[ri_129]) && check2(m_4, y, si)) with false at 379 - Remove branch 16 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_14[ri_130]) && check2(m_4, y, si)) with false at 358 - Remove branch 15 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_13[ri_131]) && check2(m_4, y, si)) with false at 337 - Remove branch 14 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_12[ri_132]) && check2(m_4, y, si)) with false at 316 - Remove branch 13 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_11[ri_133]) && check2(m_4, y, si)) with false at 295 - Remove branch 12 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_10[ri_134]) && check2(m_4, y, si)) with false at 274 - Remove branch 11 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_9[ri_135]) && check2(m_4, y, si)) with false at 253 - Remove branch 10 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_8[ri_136]) && check2(m_4, y, si)) with false at 232 - Remove branch 9 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_7[ri_137]) && check2(m_4, y, si)) with false at 211 - Remove branch 8 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_6[ri_138]) && check2(m_4, y, si)) with false at 190 - Remove branch 7 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_5[ri_139]) && check2(m_4, y, si)) with false at 169 - Remove branch 6 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_4[ri_140]) && check2(m_4, y, si)) with false at 148 - Remove branch 5 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_3[ri_141]) && check2(m_4, y, si)) with false at 127 - Remove branch 4 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_2[ri_142]) && check2(m_4, y, si)) with false at 106 - Remove branch 3 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x_1[ri_143]) && check2(m_4, y, si)) with false at 85 - Remove branch 2 in find at 62 - Replaced ((y = pkgen2(rkA)) && (m_4 = x[ri_144]) && check2(m_4, y, si)) with false at 64 - Remove branch 1 in find at 62 - Find at 62 removed (else branch kept if any) - Replaced (y = pkgen2(rkA)) with false at 568 - Remove branch 1 in find at 567 - Find at 567 removed (else branch kept if any) - Replaced ((m1 = x_23[ri_145]) && check2(m1, pkgen2(rkA), si1)) with false at 1341 - Remove branch 24 in find at 994 - Replaced ((m1 = x_22[ri_146]) && check2(m1, pkgen2(rkA), si1)) with false at 1326 - Remove branch 23 in find at 994 - Replaced ((m1 = x_21[ri_147]) && check2(m1, pkgen2(rkA), si1)) with false at 1311 - Remove branch 22 in find at 994 - Replaced ((m1 = x_20[ri_148]) && check2(m1, pkgen2(rkA), si1)) with false at 1296 - Remove branch 21 in find at 994 - Replaced ((m1 = x_19[ri_149]) && check2(m1, pkgen2(rkA), si1)) with false at 1281 - Remove branch 20 in find at 994 - Replaced ((m1 = x_18[ri_150]) && check2(m1, pkgen2(rkA), si1)) with false at 1266 - Remove branch 19 in find at 994 - Replaced ((m1 = x_17[ri_151]) && check2(m1, pkgen2(rkA), si1)) with false at 1251 - Remove branch 18 in find at 994 - Replaced ((m1 = x_16[ri_152]) && check2(m1, pkgen2(rkA), si1)) with false at 1236 - Remove branch 17 in find at 994 - Replaced ((m1 = x_15[ri_153]) && check2(m1, pkgen2(rkA), si1)) with false at 1221 - Remove branch 16 in find at 994 - Replaced ((m1 = x_14[ri_154]) && check2(m1, pkgen2(rkA), si1)) with false at 1206 - Remove branch 15 in find at 994 - Replaced ((m1 = x_13[ri_155]) && check2(m1, pkgen2(rkA), si1)) with false at 1191 - Remove branch 14 in find at 994 - Replaced ((m1 = x_12[ri_156]) && check2(m1, pkgen2(rkA), si1)) with false at 1176 - Remove branch 13 in find at 994 - Replaced ((m1 = x_11[ri_157]) && check2(m1, pkgen2(rkA), si1)) with false at 1161 - Remove branch 12 in find at 994 - Replaced ((m1 = x_10[ri_158]) && check2(m1, pkgen2(rkA), si1)) with false at 1146 - Remove branch 11 in find at 994 - Replaced ((m1 = x_9[ri_159]) && check2(m1, pkgen2(rkA), si1)) with false at 1131 - Remove branch 10 in find at 994 - Replaced ((m1 = x_8[ri_160]) && check2(m1, pkgen2(rkA), si1)) with false at 1116 - Remove branch 9 in find at 994 - Replaced ((m1 = x_7[ri_161]) && check2(m1, pkgen2(rkA), si1)) with false at 1101 - Remove branch 8 in find at 994 - Replaced ((m1 = x_6[ri_162]) && check2(m1, pkgen2(rkA), si1)) with false at 1086 - Remove branch 7 in find at 994 - Replaced ((m1 = x_5[ri_163]) && check2(m1, pkgen2(rkA), si1)) with false at 1071 - Remove branch 6 in find at 994 - Replaced ((m1 = x_4[ri_164]) && check2(m1, pkgen2(rkA), si1)) with false at 1056 - Remove branch 5 in find at 994 - Replaced ((m1 = x_3[ri_165]) && check2(m1, pkgen2(rkA), si1)) with false at 1041 - Remove branch 4 in find at 994 - Replaced ((m1 = x_2[ri_166]) && check2(m1, pkgen2(rkA), si1)) with false at 1026 - Remove branch 3 in find at 994 - Replaced ((m1 = x_1[ri_167]) && check2(m1, pkgen2(rkA), si1)) with false at 1011 - Remove branch 2 in find at 994 - Replaced ((m1 = x[ri_168]) && check2(m1, pkgen2(rkA), si1)) with false at 996 - Remove branch 1 in find at 994 - Find at 994 removed (else branch kept if any) - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_23[ri_169]) && check2(m_5, y_1, si_1)) with false at 2260 - Remove branch 24 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_22[ri_170]) && check2(m_5, y_1, si_1)) with false at 2239 - Remove branch 23 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_21[ri_171]) && check2(m_5, y_1, si_1)) with false at 2218 - Remove branch 22 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_20[ri_172]) && check2(m_5, y_1, si_1)) with false at 2197 - Remove branch 21 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_19[ri_173]) && check2(m_5, y_1, si_1)) with false at 2176 - Remove branch 20 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_18[ri_174]) && check2(m_5, y_1, si_1)) with false at 2155 - Remove branch 19 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_17[ri_175]) && check2(m_5, y_1, si_1)) with false at 2134 - Remove branch 18 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_16[ri_176]) && check2(m_5, y_1, si_1)) with false at 2113 - Remove branch 17 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_15[ri_177]) && check2(m_5, y_1, si_1)) with false at 2092 - Remove branch 16 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_14[ri_178]) && check2(m_5, y_1, si_1)) with false at 2071 - Remove branch 15 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_13[ri_179]) && check2(m_5, y_1, si_1)) with false at 2050 - Remove branch 14 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_12[ri_180]) && check2(m_5, y_1, si_1)) with false at 2029 - Remove branch 13 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_11[ri_181]) && check2(m_5, y_1, si_1)) with false at 2008 - Remove branch 12 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_10[ri_182]) && check2(m_5, y_1, si_1)) with false at 1987 - Remove branch 11 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_9[ri_183]) && check2(m_5, y_1, si_1)) with false at 1966 - Remove branch 10 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_8[ri_184]) && check2(m_5, y_1, si_1)) with false at 1945 - Remove branch 9 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_7[ri_185]) && check2(m_5, y_1, si_1)) with false at 1924 - Remove branch 8 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_6[ri_186]) && check2(m_5, y_1, si_1)) with false at 1903 - Remove branch 7 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_5[ri_187]) && check2(m_5, y_1, si_1)) with false at 1882 - Remove branch 6 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_4[ri_188]) && check2(m_5, y_1, si_1)) with false at 1861 - Remove branch 5 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_3[ri_189]) && check2(m_5, y_1, si_1)) with false at 1840 - Remove branch 4 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_2[ri_190]) && check2(m_5, y_1, si_1)) with false at 1819 - Remove branch 3 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x_1[ri_191]) && check2(m_5, y_1, si_1)) with false at 1798 - Remove branch 2 in find at 1775 - Replaced ((y_1 = pkgen2(rkA)) && (m_5 = x[ri_192]) && check2(m_5, y_1, si_1)) with false at 1777 - Remove branch 1 in find at 1775 - Find at 1775 removed (else branch kept if any) - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_23[ri_49]) && check2(m_6, y_2, si_2)) with false at 3244 - Remove branch 24 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_22[ri_50]) && check2(m_6, y_2, si_2)) with false at 3223 - Remove branch 23 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_21[ri_51]) && check2(m_6, y_2, si_2)) with false at 3202 - Remove branch 22 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_20[ri_52]) && check2(m_6, y_2, si_2)) with false at 3181 - Remove branch 21 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_19[ri_53]) && check2(m_6, y_2, si_2)) with false at 3160 - Remove branch 20 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_18[ri_54]) && check2(m_6, y_2, si_2)) with false at 3139 - Remove branch 19 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_17[ri_55]) && check2(m_6, y_2, si_2)) with false at 3118 - Remove branch 18 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_16[ri_56]) && check2(m_6, y_2, si_2)) with false at 3097 - Remove branch 17 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_15[ri_57]) && check2(m_6, y_2, si_2)) with false at 3076 - Remove branch 16 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_14[ri_58]) && check2(m_6, y_2, si_2)) with false at 3055 - Remove branch 15 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_13[ri_59]) && check2(m_6, y_2, si_2)) with false at 3034 - Remove branch 14 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_12[ri_60]) && check2(m_6, y_2, si_2)) with false at 3013 - Remove branch 13 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_11[ri_61]) && check2(m_6, y_2, si_2)) with false at 2992 - Remove branch 12 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_10[ri_62]) && check2(m_6, y_2, si_2)) with false at 2971 - Remove branch 11 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_9[ri_63]) && check2(m_6, y_2, si_2)) with false at 2950 - Remove branch 10 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_8[ri_64]) && check2(m_6, y_2, si_2)) with false at 2929 - Remove branch 9 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_7[ri_65]) && check2(m_6, y_2, si_2)) with false at 2908 - Remove branch 8 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_6[ri_66]) && check2(m_6, y_2, si_2)) with false at 2887 - Remove branch 7 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_5[ri_67]) && check2(m_6, y_2, si_2)) with false at 2866 - Remove branch 6 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_4[ri_68]) && check2(m_6, y_2, si_2)) with false at 2845 - Remove branch 5 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_3[ri_69]) && check2(m_6, y_2, si_2)) with false at 2824 - Remove branch 4 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_2[ri_70]) && check2(m_6, y_2, si_2)) with false at 2803 - Remove branch 3 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x_1[ri_71]) && check2(m_6, y_2, si_2)) with false at 2782 - Remove branch 2 in find at 2759 - Replaced ((y_2 = pkgen2(rkA)) && (m_6 = x[ri_72]) && check2(m_6, y_2, si_2)) with false at 2761 - Remove branch 1 in find at 2759 - Find at 2759 removed (else branch kept if any) - Replaced (y_2 = pkgen2(rkA)) with false at 3265 - Remove branch 1 in find at 3264 - Find at 3264 removed (else branch kept if any) - Replaced ((m1_1 = x_23[ri_73]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3838 - Remove branch 24 in find at 3491 - Replaced ((m1_1 = x_22[ri_74]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3823 - Remove branch 23 in find at 3491 - Replaced ((m1_1 = x_21[ri_75]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3808 - Remove branch 22 in find at 3491 - Replaced ((m1_1 = x_20[ri_76]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3793 - Remove branch 21 in find at 3491 - Replaced ((m1_1 = x_19[ri_77]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3778 - Remove branch 20 in find at 3491 - Replaced ((m1_1 = x_18[ri_78]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3763 - Remove branch 19 in find at 3491 - Replaced ((m1_1 = x_17[ri_79]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3748 - Remove branch 18 in find at 3491 - Replaced ((m1_1 = x_16[ri_80]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3733 - Remove branch 17 in find at 3491 - Replaced ((m1_1 = x_15[ri_81]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3718 - Remove branch 16 in find at 3491 - Replaced ((m1_1 = x_14[ri_82]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3703 - Remove branch 15 in find at 3491 - Replaced ((m1_1 = x_13[ri_83]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3688 - Remove branch 14 in find at 3491 - Replaced ((m1_1 = x_12[ri_84]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3673 - Remove branch 13 in find at 3491 - Replaced ((m1_1 = x_11[ri_85]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3658 - Remove branch 12 in find at 3491 - Replaced ((m1_1 = x_10[ri_86]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3643 - Remove branch 11 in find at 3491 - Replaced ((m1_1 = x_9[ri_87]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3628 - Remove branch 10 in find at 3491 - Replaced ((m1_1 = x_8[ri_88]) && check2(m1_1, pkgen2(rkA), si1_1)) with false at 3613 - Remove branch 9 in find at 3491 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_23[ri_97]) && check2(m_7, y_3, si_3)) with false at 4557 - Remove branch 24 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_22[ri_98]) && check2(m_7, y_3, si_3)) with false at 4536 - Remove branch 23 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_21[ri_99]) && check2(m_7, y_3, si_3)) with false at 4515 - Remove branch 22 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_20[ri_100]) && check2(m_7, y_3, si_3)) with false at 4494 - Remove branch 21 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_19[ri_101]) && check2(m_7, y_3, si_3)) with false at 4473 - Remove branch 20 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_18[ri_102]) && check2(m_7, y_3, si_3)) with false at 4452 - Remove branch 19 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_17[ri_103]) && check2(m_7, y_3, si_3)) with false at 4431 - Remove branch 18 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_16[ri_104]) && check2(m_7, y_3, si_3)) with false at 4410 - Remove branch 17 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_15[ri_105]) && check2(m_7, y_3, si_3)) with false at 4389 - Remove branch 16 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_14[ri_106]) && check2(m_7, y_3, si_3)) with false at 4368 - Remove branch 15 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_13[ri_107]) && check2(m_7, y_3, si_3)) with false at 4347 - Remove branch 14 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_12[ri_108]) && check2(m_7, y_3, si_3)) with false at 4326 - Remove branch 13 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_11[ri_109]) && check2(m_7, y_3, si_3)) with false at 4305 - Remove branch 12 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_10[ri_110]) && check2(m_7, y_3, si_3)) with false at 4284 - Remove branch 11 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_9[ri_111]) && check2(m_7, y_3, si_3)) with false at 4263 - Remove branch 10 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_8[ri_112]) && check2(m_7, y_3, si_3)) with false at 4242 - Remove branch 9 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_7[ri_113]) && check2(m_7, y_3, si_3)) with false at 4221 - Remove branch 8 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_6[ri_114]) && check2(m_7, y_3, si_3)) with false at 4200 - Remove branch 7 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_5[ri_115]) && check2(m_7, y_3, si_3)) with false at 4179 - Remove branch 6 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_4[ri_116]) && check2(m_7, y_3, si_3)) with false at 4158 - Remove branch 5 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_3[ri_117]) && check2(m_7, y_3, si_3)) with false at 4137 - Remove branch 4 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_2[ri_118]) && check2(m_7, y_3, si_3)) with false at 4116 - Remove branch 3 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x_1[ri_119]) && check2(m_7, y_3, si_3)) with false at 4095 - Remove branch 2 in find at 4072 - Replaced ((y_3 = pkgen2(rkA)) && (m_7 = x[ri_120]) && check2(m_7, y_3, si_3)) with false at 4074 - Remove branch 1 in find at 4072 - Find at 4072 removed (else branch kept if any) yields Game 16 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( if (let m_4: blocksize = concatB(A, hostB, ga, gb_1) in (let y: pkey = pkB in (let si: signature = s_2 in check(m_4, y, si)))) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], (let x_1: blocksize = m_2 in sign_r2(x_1, skgen2(rkA), r_15))); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], (let x_2: blocksize = m_2 in sign_r2(x_2, skgen2(rkA), r_16))); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], (let x_3: blocksize = m_2 in sign_r2(x_3, skgen2(rkA), r_17))); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], (let x_4: blocksize = m_2 in sign_r2(x_4, skgen2(rkA), r_18))); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], (let x_5: blocksize = m_2 in sign_r2(x_5, skgen2(rkA), r_19))); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], (let x_6: blocksize = m_2 in sign_r2(x_6, skgen2(rkA), r_20))); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], (let x_7: blocksize = m_2 in sign_r2(x_7, skgen2(rkA), r_21))); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], (let x: blocksize = m_2 in sign_r2(x, skgen2(rkA), r_14))); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then ( {469} if {470}(let m1: blocksize = concatB(A, hostB, ga, gb_1) in {479}(let si1: signature = s_2 in false)) then let gab: G = exp(gb_1, a) in find [unique] u_53 = ri_41 <= NA suchthat defined(r_7[ri_41], gab[ri_41]) && (gab = gab[ri_41]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_23: sign_seed; out(cA4[iA], (let x_9: blocksize = m_2 in sign_r2(x_9, skgen2(rkA), r_23))); in(cA5[iA], ()); out(cA6[iA], r_7[u_53]) ) orfind u_52 = ri_40 <= NA suchthat defined(r_8[ri_40], gab[ri_40]) && (gab = gab[ri_40]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_24: sign_seed; out(cA4[iA], (let x_10: blocksize = m_2 in sign_r2(x_10, skgen2(rkA), r_24))); in(cA5[iA], ()); out(cA6[iA], r_8[u_52]) ) orfind u_51 = ri_39 <= NA suchthat defined(r_9[ri_39], gab[ri_39]) && (gab = gab[ri_39]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_25: sign_seed; out(cA4[iA], (let x_11: blocksize = m_2 in sign_r2(x_11, skgen2(rkA), r_25))); in(cA5[iA], ()); out(cA6[iA], r_9[u_51]) ) orfind u_50 = ri_38 <= NB suchthat defined(r_10[ri_38], gab_1[ri_38]) && (gab = gab_1[ri_38]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_26: sign_seed; out(cA4[iA], (let x_12: blocksize = m_2 in sign_r2(x_12, skgen2(rkA), r_26))); in(cA5[iA], ()); out(cA6[iA], r_10[u_50]) ) orfind u_49 = ri_37 <= NB suchthat defined(r_11[ri_37], gab_1[ri_37]) && (gab = gab_1[ri_37]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_27: sign_seed; out(cA4[iA], (let x_13: blocksize = m_2 in sign_r2(x_13, skgen2(rkA), r_27))); in(cA5[iA], ()); out(cA6[iA], r_11[u_49]) ) orfind u_48 = ri_36 <= NB suchthat defined(r_12[ri_36], gab_1[ri_36]) && (gab = gab_1[ri_36]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_28: sign_seed; out(cA4[iA], (let x_14: blocksize = m_2 in sign_r2(x_14, skgen2(rkA), r_28))); in(cA5[iA], ()); out(cA6[iA], r_12[u_48]) ) orfind u_47 = ri_35 <= qH suchthat defined(r_13[ri_35], x1[ri_35]) && (gab = x1[ri_35]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_29: sign_seed; out(cA4[iA], (let x_15: blocksize = m_2 in sign_r2(x_15, skgen2(rkA), r_29))); in(cA5[iA], ()); out(cA6[iA], r_13[u_47]) ) else new r_8: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_22: sign_seed; out(cA4[iA], (let x_8: blocksize = m_2 in sign_r2(x_8, skgen2(rkA), r_22))); in(cA5[iA], ()); out(cA6[iA], r_8) ) orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( {885} if (let m_5: blocksize = concatB(A, hostB, ga, gb_1) in (let y_1: pkey = Kkey[u_10] in (let si_1: signature = s_2 in {902}if y_1 = pkgen2(rkA) then false else check(m_5, y_1, si_1)))) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], (let x_17: blocksize = m_2 in sign_r2(x_17, skgen2(rkA), r_31))); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], (let x_18: blocksize = m_2 in sign_r2(x_18, skgen2(rkA), r_32))); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], (let x_19: blocksize = m_2 in sign_r2(x_19, skgen2(rkA), r_33))); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], (let x_20: blocksize = m_2 in sign_r2(x_20, skgen2(rkA), r_34))); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], (let x_21: blocksize = m_2 in sign_r2(x_21, skgen2(rkA), r_35))); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], (let x_22: blocksize = m_2 in sign_r2(x_22, skgen2(rkA), r_36))); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], (let x_23: blocksize = m_2 in sign_r2(x_23, skgen2(rkA), r_37))); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], (let x_16: blocksize = m_2 in sign_r2(x_16, skgen2(rkA), r_30))); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( if (let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in (let y_2: pkey = pkB in (let si_2: signature = s_3 in check(m_6, y_2, si_2)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( {1588} if (let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in (let si1_1: signature = s_3 in find u_108 = ri_96 <= NA suchthat defined(x[ri_96]) && (m1_1 = x[ri_96]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_107 = ri_95 <= NA suchthat defined(x_1[ri_95]) && (m1_1 = x_1[ri_95]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_106 = ri_94 <= NA suchthat defined(x_2[ri_94]) && (m1_1 = x_2[ri_94]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_105 = ri_93 <= NA suchthat defined(x_3[ri_93]) && (m1_1 = x_3[ri_93]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_104 = ri_92 <= NA suchthat defined(x_4[ri_92]) && (m1_1 = x_4[ri_92]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_103 = ri_91 <= NA suchthat defined(x_5[ri_91]) && (m1_1 = x_5[ri_91]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_102 = ri_90 <= NA suchthat defined(x_6[ri_90]) && (m1_1 = x_6[ri_90]) && check2(m1_1, pkgen2(rkA), si1_1) then true orfind u_101 = ri_89 <= NA suchthat defined(x_7[ri_89]) && (m1_1 = x_7[ri_89]) && check2(m1_1, pkgen2(rkA), si1_1) then true else false)) then let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( {1925} if (let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in (let y_3: pkey = Kkey[u_4] in (let si_3: signature = s_3 in {1942}if y_3 = pkgen2(rkA) then false else check(m_7, y_3, si_3)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying expand - Expand if/find/let - Transformed find at 1942 into a test - Test at 1925 always false - Test at 1588 always false - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Test at 1588 always true - Transformed find at 902 into a test - Test at 885 always false - Test at 469 always false - Remove let at 479 - Remove let at 470 yields Game 17 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in let y: pkey = pkB in let si: signature = s_2 in if check(m_4, y, si) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; let x_1: blocksize = m_2 in out(cA4[iA], sign_r2(x_1, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; let x_2: blocksize = m_2 in out(cA4[iA], sign_r2(x_2, skgen2(rkA), r_16)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; let x_3: blocksize = m_2 in out(cA4[iA], sign_r2(x_3, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; let x_4: blocksize = m_2 in out(cA4[iA], sign_r2(x_4, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; let x_5: blocksize = m_2 in out(cA4[iA], sign_r2(x_5, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; let x_6: blocksize = m_2 in out(cA4[iA], sign_r2(x_6, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; let x_7: blocksize = m_2 in out(cA4[iA], sign_r2(x_7, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; let x: blocksize = m_2 in out(cA4[iA], sign_r2(x, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( let m_5: blocksize = concatB(A, hostB, ga, gb_1) in let y_1: pkey = Kkey[u_10] in let si_1: signature = s_2 in if y_1 = pkgen2(rkA) then yield else if check(m_5, y_1, si_1) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; let x_17: blocksize = m_2 in out(cA4[iA], sign_r2(x_17, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; let x_18: blocksize = m_2 in out(cA4[iA], sign_r2(x_18, skgen2(rkA), r_32)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; let x_19: blocksize = m_2 in out(cA4[iA], sign_r2(x_19, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; let x_20: blocksize = m_2 in out(cA4[iA], sign_r2(x_20, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; let x_21: blocksize = m_2 in out(cA4[iA], sign_r2(x_21, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; let x_22: blocksize = m_2 in out(cA4[iA], sign_r2(x_22, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; let x_23: blocksize = m_2 in out(cA4[iA], sign_r2(x_23, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; let x_16: blocksize = m_2 in out(cA4[iA], sign_r2(x_16, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in let y_2: pkey = pkB in let si_2: signature = s_3 in if check(m_6, y_2, si_2) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in let si1_1: signature = s_3 in find u_108 = ri_96 <= NA suchthat defined(x[ri_96]) && (m1_1 = x[ri_96]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_107 = ri_95 <= NA suchthat defined(x_1[ri_95]) && (m1_1 = x_1[ri_95]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_106 = ri_94 <= NA suchthat defined(x_2[ri_94]) && (m1_1 = x_2[ri_94]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(x_3[ri_93]) && (m1_1 = x_3[ri_93]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(x_4[ri_92]) && (m1_1 = x_4[ri_92]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(x_5[ri_91]) && (m1_1 = x_5[ri_91]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(x_6[ri_90]) && (m1_1 = x_6[ri_90]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(x_7[ri_89]) && (m1_1 = x_7[ri_89]) && check2(m1_1, pkgen2(rkA), si1_1) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in let y_3: pkey = Kkey[u_4] in let si_3: signature = s_3 in if y_3 = pkgen2(rkA) then yield else if check(m_7, y_3, si_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on y_2 (definition removed, all usages removed) - Remove assignments on si_2 (definition removed, all usages removed) - Remove assignments on si1_1 (definition removed, all usages removed) - Remove assignments on y_3 (definition removed, all usages removed) - Remove assignments on si_3 (definition removed, all usages removed) - Remove assignments on y (definition removed, all usages removed) - Remove assignments on si (definition removed, all usages removed) - Remove assignments on x (definition removed, all usages removed) - Remove assignments on x_1 (definition removed, all usages removed) - Remove assignments on x_2 (definition removed, all usages removed) - Remove assignments on x_3 (definition removed, all usages removed) - Remove assignments on x_4 (definition removed, all usages removed) - Remove assignments on x_5 (definition removed, all usages removed) - Remove assignments on x_6 (definition removed, all usages removed) - Remove assignments on x_7 (definition removed, all usages removed) - Remove assignments on y_1 (definition removed, all usages removed) - Remove assignments on si_1 (definition removed, all usages removed) - Remove assignments on x_16 (definition removed, all usages removed) - Remove assignments on x_17 (definition removed, all usages removed) - Remove assignments on x_18 (definition removed, all usages removed) - Remove assignments on x_19 (definition removed, all usages removed) - Remove assignments on x_20 (definition removed, all usages removed) - Remove assignments on x_21 (definition removed, all usages removed) - Remove assignments on x_22 (definition removed, all usages removed) - Remove assignments on x_23 (definition removed, all usages removed) yields Game 18 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in {69} find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_45 = ri_33 <= NA suchthat defined(r_8[ri_33], gab[ri_33]) && (gab = gab[ri_33]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_16: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_16)); in(cA5[iA], ()); let keyA: D = r_8[u_45] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if Kkey[u_10] = pkgen2(rkA) then yield else if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in {481} find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_59 = ri_47 <= NA suchthat defined(r_8[ri_47], gab[ri_47]) && (gab = gab[ri_47]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_32: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_32)); in(cA5[iA], ()); out(cA6[iA], r_8[u_59]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in {924} find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_24 = ri_12 <= NA suchthat defined(r_8[ri_12], gab[ri_12]) && (gab_1 = gab[ri_12]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_24]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {1128} find u_108 = ri_96 <= NA suchthat defined(m_2[ri_96], r_14[ri_96]) && {1131}((m1_1 = m_2[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {1145}exp(ga_1, b) in {1150} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && {1297}(gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_107 = ri_95 <= NA suchthat defined(m_2[ri_95], r_15[ri_95]) && {1339}((m1_1 = m_2[ri_95]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {1353}exp(ga_1, b) in {1358} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_106 = ri_94 <= NA suchthat defined(m_2[ri_94], r_16[ri_94]) && (m1_1 = m_2[ri_94]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(ga_1, b) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(m_2[ri_93], r_17[ri_93]) && {1755}((m1_1 = m_2[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {1769}exp(ga_1, b) in {1774} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(m_2[ri_92], r_18[ri_92]) && {1963}((m1_1 = m_2[ri_92]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {1977}exp(ga_1, b) in {1982} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(m_2[ri_91], r_19[ri_91]) && {2171}((m1_1 = m_2[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {2185}exp(ga_1, b) in {2190} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(m_2[ri_90], r_20[ri_90]) && {2379}((m1_1 = m_2[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {2393}exp(ga_1, b) in {2398} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(m_2[ri_89], r_21[ri_89]) && {2587}((m1_1 = m_2[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = {2601}exp(ga_1, b) in {2606} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_31 = ri_19 <= NA suchthat defined(r_8[ri_19], gab[ri_19]) && (gab_1 = gab[ri_19]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_8[u_31] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if Kkey[u_4] = pkgen2(rkA) then yield else if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in {2835} find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_38 = ri_26 <= NA suchthat defined(r_8[ri_26], gab[ri_26]) && (gab_1 = gab[ri_26]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_8[u_38]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); {3030} find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_17 = ri_5 <= NA suchthat defined(r_8[ri_5], gab[ri_5]) && (x1 = gab[ri_5]) then out(ch2[iH], r_8[u_17]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Remove branch 2 in find at 3030 - Remove branch 2 in find at 2835 - Replaced ((m1_1 = m_2[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) at 2587 - Replaced exp(ga_1, b) with exp(g, mult(a[u_101], b)) at 2601 - Remove else branch of find at 2606 - In branch 7 of find at 2606, substituting u_26 with u_40[u_101] - Replaced defined condition r_13[ri_14], x1[ri_14] with an empty condition in find at 2606 - A single branch always succeeds in find at 2606 - Replaced defined condition m_2[ri_89], r_21[ri_89] with r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89] in find at 1128 - Replaced ((m1_1 = m_2[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) at 2379 - Replaced exp(ga_1, b) with exp(g, mult(a[u_102], b)) at 2393 - Remove branch 2 in find at 2398 - Replaced defined condition m_2[ri_90], r_20[ri_90] with r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90] in find at 1128 - Replaced ((m1_1 = m_2[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) at 2171 - Replaced exp(ga_1, b) with exp(g, mult(a[u_103], b)) at 2185 - Remove branch 2 in find at 2190 - Replaced defined condition m_2[ri_91], r_19[ri_91] with r_19[ri_91], a[ri_91], ga[ri_91], gb_1[ri_91] in find at 1128 - Replaced ((m1_1 = m_2[ri_92]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3)) at 1963 - Replaced exp(ga_1, b) with exp(g, mult(a[u_104], b)) at 1977 - Remove branch 2 in find at 1982 - Replaced defined condition m_2[ri_92], r_18[ri_92] with r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92] in find at 1128 - Replaced ((m1_1 = m_2[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) at 1755 - Replaced exp(ga_1, b) with exp(g, mult(a[u_105], b)) at 1769 - Remove branch 2 in find at 1774 - Replaced defined condition m_2[ri_93], r_17[ri_93] with r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93] in find at 1128 - Remove branch 3 in find at 1128 - Replaced ((m1_1 = m_2[ri_95]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3)) at 1339 - Replaced exp(ga_1, b) with exp(g, mult(a[u_107], b)) at 1353 - Remove branch 2 in find at 1358 - Replaced defined condition m_2[ri_95], r_15[ri_95] with r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95] in find at 1128 - Replaced ((m1_1 = m_2[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) with ((gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) at 1131 - Replaced exp(ga_1, b) with exp(g, mult(a[u_108], b)) at 1145 - Remove else branch of find at 1150 - Replaced (gab_1 = x1[ri_14]) with false at 1297 - Remove branch 7 in find at 1150 - Remove branch 6 in find at 1150 - Remove branch 5 in find at 1150 - Remove branch 4 in find at 1150 - Remove branch 3 in find at 1150 - Remove branch 2 in find at 1150 - In branch 1 of find at 1150, substituting u_32 with u_108 - A single branch always succeeds in find at 1150 - Replaced defined condition m_2[ri_96], r_14[ri_96] with r_14[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96] in find at 1128 - Remove branch 2 in find at 924 - Remove branch 2 in find at 481 - Remove branch 2 in find at 69 yields Game 19 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if Kkey[u_10] = pkgen2(rkA) then yield else if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {1012} find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in {1045} if defined(gab[u_108], r_7[u_108]) && {1050}(gab_1 = gab[u_108]) then let u_32 <= NA = u_108 in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in {1696} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && {1819}(gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let u_26 <= qH = u_40[u_101] in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if Kkey[u_4] = pkgen2(rkA) then yield else if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Remove else branch of find at 1696 - Replaced (gab_1 = x1[ri_14]) with false at 1819 - Remove branch 6 in find at 1696 - Remove branch 5 in find at 1696 - In branch 4 of find at 1696, substituting u_28 with u_42[u_103] - Replaced defined condition r_11[ri_16], gab_1[ri_16] with an empty condition in find at 1696 - A single branch always succeeds in find at 1696 - Replaced defined condition r_19[ri_91], a[ri_91], ga[ri_91], gb_1[ri_91] with r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91] in find at 1012 - Replaced (gab_1 = gab[u_108]) with true at 1050 - Replaced defined condition gab[u_108], r_7[u_108] with an empty condition in find at 1045 - A single branch always succeeds in find at 1045 - Replaced defined condition r_14[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96] with r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96] in find at 1012 yields Game 20 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if Kkey[u_10] = pkgen2(rkA) then yield else if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let u_32 <= NA = u_108 in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let u_28 <= NB = u_42[u_103] in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let u_26 <= qH = u_40[u_101] in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if Kkey[u_4] = pkgen2(rkA) then yield else if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying move all binders - Move assignment to m_7 - Move assignment to m_5 yields Game 21 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let u_32 <= NA = u_108 in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let u_28 <= NB = u_42[u_103] in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let u_26 <= qH = u_40[u_101] in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on u_32 (definition removed, all usages removed) - Remove assignments on u_28 (definition removed, all usages removed) - Remove assignments on u_26 (definition removed, all usages removed) yields Game 22 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let skB: skey = skgen(rkB) in let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skB, r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Proved inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB in game 22 up to probability NB^2 * PCollKey1 + NA^2 * NB^2 * PCollKey2 Applying remove assignments of binder skB - Remove assignments on skB (definition removed, all usages removed) yields Game 23 is in(start, ()); new rkA: keyseed; new rkB: keyseed; let pkB: pkey = pkgen(rkB) in out(cstart, (pkgen2(rkA), pkB)); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkB, s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skgen(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkB, s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder pkB - Remove assignments on pkB (definition removed, all usages removed) yields Game 24 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_4, pkgen(rkB), s_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r(m_3, skgen(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_6, pkgen(rkB), s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying equivalence uf_cma(sign) with rkB [probability Psign(time_2, NB)] - Equivalence uf_cma(sign) with variables: r_3 -> r2, rkB -> r yields Game 25 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in if (let m1_2: blocksize = m_4 in (let si1_2: signature = s_2 in find u_207 = ri_195 <= NB suchthat defined(x_24[ri_195]) && (m1_2 = x_24[ri_195]) && check2(m1_2, pkgen2(rkB), si1_2) then true else false)) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if (let m_8: blocksize = m_5 in (let y_4: pkey = Kkey[u_10] in (let si_4: signature = s_2 in {443}find u_208 = ri_196 <= NB suchthat defined(x_24[ri_196]) && {445}((y_4 = pkgen2(rkB)) && (m_8 = x_24[ri_196]) && check2(m_8, y_4, si_4)) then true else if y_4 = pkgen2(rkB) then false else check(m_8, y_4, si_4)))) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, (let x_24: blocksize = m_3 in sign_r2(x_24, skgen2(rkB), r_3)))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in if (let m1_3: blocksize = m_6 in (let si1_3: signature = s_3 in {880}find u_205 = ri_193 <= NB suchthat defined(x_24[ri_193]) && {882}((m1_3 = x_24[ri_193]) && check2(m1_3, pkgen2(rkB), si1_3)) then true else false)) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if (let m_9: blocksize = m_7 in (let y_5: pkey = Kkey[u_4] in (let si_5: signature = s_3 in {2059}find u_206 = ri_194 <= NB suchthat defined(x_24[ri_194]) && {2061}((y_5 = pkgen2(rkB)) && (m_9 = x_24[ri_194]) && check2(m_9, y_5, si_5)) then true else if y_5 = pkgen2(rkB) then false else check(m_9, y_5, si_5)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify (non-expanded game) - Simplification pass - Replaced ((y_4 = pkgen2(rkB)) && (m_8 = x_24[ri_196]) && check2(m_8, y_4, si_4)) with false at 445 - Remove branch 1 in find at 443 - Find at 443 removed (else branch kept if any) - Replaced ((m1_3 = x_24[ri_193]) && check2(m1_3, pkgen2(rkB), si1_3)) with false at 882 - Remove branch 1 in find at 880 - Find at 880 removed (else branch kept if any) - Replaced ((y_5 = pkgen2(rkB)) && (m_9 = x_24[ri_194]) && check2(m_9, y_5, si_5)) with false at 2061 - Remove branch 1 in find at 2059 - Find at 2059 removed (else branch kept if any) yields Game 26 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in {51} if (let m1_2: blocksize = m_4 in (let si1_2: signature = s_2 in find u_207 = ri_195 <= NB suchthat defined(x_24[ri_195]) && (m1_2 = x_24[ri_195]) && check2(m1_2, pkgen2(rkB), si1_2) then true else false)) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in {432} if (let m_8: blocksize = m_5 in (let y_4: pkey = Kkey[u_10] in (let si_4: signature = s_2 in {443}if y_4 = pkgen2(rkB) then false else check(m_8, y_4, si_4)))) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, (let x_24: blocksize = m_3 in sign_r2(x_24, skgen2(rkB), r_3)))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then ( {842} let m_6: blocksize = concatA(hostA, B, ga_1, gb_2) in {851} if {852}(let m1_3: blocksize = m_6 in {855}(let si1_3: signature = s_3 in false)) then let gab_1: G = exp(ga_1, b) in find [unique] u_25 = ri_13 <= NA suchthat defined(r_7[ri_13], gab[ri_13]) && (gab_1 = gab[ri_13]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_25]) orfind u_23 = ri_11 <= NA suchthat defined(r_9[ri_11], gab[ri_11]) && (gab_1 = gab[ri_11]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_23]) orfind u_22 = ri_10 <= NB suchthat defined(r_10[ri_10], gab_1[ri_10]) && (gab_1 = gab_1[ri_10]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_22]) orfind u_21 = ri_9 <= NB suchthat defined(r_11[ri_9], gab_1[ri_9]) && (gab_1 = gab_1[ri_9]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_21]) orfind u_20 = ri_8 <= NB suchthat defined(r_12[ri_8], gab_1[ri_8]) && (gab_1 = gab_1[ri_8]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_20]) orfind u_19 = ri_7 <= qH suchthat defined(r_13[ri_7], x1[ri_7]) && (gab_1 = x1[ri_7]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_19]) else new r_10: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10) ) orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_26] ) else new r_11: D; event endB(hostA, B, ga_1, gb_2); let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in event endB(hostA, B, ga_1, gb_2); let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in {2010} if (let m_9: blocksize = m_7 in (let y_5: pkey = Kkey[u_4] in (let si_5: signature = s_3 in {2021}if y_5 = pkgen2(rkB) then false else check(m_9, y_5, si_5)))) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_13[u_33]) else new r_12: D; event endB(hostA, B, ga_1, gb_2); out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying expand - Expand if/find/let - Transformed find at 2021 into a test - Test at 2010 always false - Test at 851 always false - Remove let at 855 - Remove let at 852 - Remove let at 842 - Transformed find at 443 into a test - Test at 432 always false - Test at 51 always false - Test at 51 always true yields Game 27 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in let m1_2: blocksize = m_4 in let si1_2: signature = s_2 in find u_207 = ri_195 <= NB suchthat defined(x_24[ri_195]) && (m1_2 = x_24[ri_195]) && check2(m1_2, pkgen2(rkB), si1_2) then let gab: G = exp(gb_1, a) in find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && (gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in let m_8: blocksize = m_5 in let y_4: pkey = Kkey[u_10] in let si_4: signature = s_2 in if y_4 = pkgen2(rkB) then yield else if check(m_8, y_4, si_4) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; let x_24: blocksize = m_3 in out(cB2[iB], (hostA, B, gb_2, sign_r2(x_24, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && (gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && (gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && (gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && (gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && (gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in let m_9: blocksize = m_7 in let y_5: pkey = Kkey[u_4] in let si_5: signature = s_3 in if y_5 = pkgen2(rkB) then yield else if check(m_9, y_5, si_5) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on x_24 (definition removed, all usages removed) - Remove assignments on m_9 (definition removed, all usages removed) - Remove assignments on y_5 (definition removed, all usages removed) - Remove assignments on si_5 (definition removed, all usages removed) - Remove assignments on m1_2 (definition removed, all usages removed) - Remove assignments on si1_2 (definition removed, all usages removed) - Remove assignments on m_8 (definition removed, all usages removed) - Remove assignments on y_4 (definition removed, all usages removed) - Remove assignments on si_4 (definition removed, all usages removed) yields Game 28 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in {51} find u_207 = ri_195 <= NB suchthat defined(m_3[ri_195], r_3[ri_195]) && {54}((m_4 = m_3[ri_195]) && check2(m_4, pkgen2(rkB), s_2)) then let gab: G = {68}exp(gb_1, a) in {73} find [unique] u_46 = ri_34 <= NA suchthat defined(r_7[ri_34], gab[ri_34]) && {76}(gab = gab[ri_34]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_15: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_15)); in(cA5[iA], ()); let keyA: D = r_7[u_46] ) orfind u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_43 = ri_31 <= NB suchthat defined(r_10[ri_31], gab_1[ri_31]) && (gab = gab_1[ri_31]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_18: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_18)); in(cA5[iA], ()); let keyA: D = r_10[u_43] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if Kkey[u_10] = pkgen2(rkB) then yield else if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in {447} find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_57 = ri_45 <= NB suchthat defined(r_10[ri_45], gab_1[ri_45]) && (gab = gab_1[ri_45]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_34: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_34)); in(cA5[iA], ()); out(cA6[iA], r_10[u_57]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {839} find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96]) && {845}((gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_107 = ri_95 <= NA suchthat defined(r_15[ri_95], a[ri_95], ga[ri_95], gb_1[ri_95]) && (gb_2 = gb_1[ri_95]) && (ga_1 = ga[ri_95]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_107], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93]) && {1002}((gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in {1030} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && {1033}(gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_104 = ri_92 <= NA suchthat defined(r_18[ri_92], a[ri_92], ga[ri_92], gb_1[ri_92]) && (gb_2 = gb_1[ri_92]) && (ga_1 = ga[ri_92]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_104], b)) in find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && (gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91]) && {1240}((gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90]) && {1280}((gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in {1308} find [unique] u_32 = ri_20 <= NA suchthat defined(r_7[ri_20], gab[ri_20]) && {1311}(gab_1 = gab[ri_20]) then ( let keyB: D = r_7[u_32] ) orfind u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_29 = ri_17 <= NB suchthat defined(r_10[ri_17], gab_1[ri_17]) && (gab_1 = gab_1[ri_17]) then ( let keyB: D = r_10[u_29] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89]) && {1400}((gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if Kkey[u_4] = pkgen2(rkB) then yield else if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in {1486} find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_36 = ri_24 <= NB suchthat defined(r_10[ri_24], gab_1[ri_24]) && (gab_1 = gab_1[ri_24]) then out(cB4[iB], r_10[u_36]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); {1580} find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_15 = ri_3 <= NB suchthat defined(r_10[ri_3], gab_1[ri_3]) && (x1 = gab_1[ri_3]) then out(ch2[iH], r_10[u_15]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify [probability (NA^2 + NB^2) * PCollKey1 + NB^2 * NA^2 * PCollKey2] - Simplification pass - Remove branch 3 in find at 1580 - Remove branch 3 in find at 1486 - Replaced ((gb_2 = gb_1[ri_89]) && (ga_1 = ga[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) with ((iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3)) at 1400 - Replaced defined condition r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], ga[ri_89], gb_1[ri_89] with r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89] in find at 839 - Replaced ((gb_2 = gb_1[ri_90]) && (ga_1 = ga[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) with ((iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3)) at 1280 - Remove branch 3 in find at 1308 - Replaced (gab_1 = gab[ri_20]) with (u_102 = ri_20) at 1311 - Remove branch 1 in find at 1308 - Replaced defined condition r_20[ri_90], a[ri_90], ga[ri_90], gb_1[ri_90] with r_20[ri_90], a[ri_90], u_207[ri_90] in find at 839 - Replaced ((gb_2 = gb_1[ri_91]) && (ga_1 = ga[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) with ((iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3)) at 1240 - Replaced defined condition r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], ga[ri_91], gb_1[ri_91] with r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91] in find at 839 - Remove branch 4 in find at 839 - Replaced ((gb_2 = gb_1[ri_93]) && (ga_1 = ga[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) with ((iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3)) at 1002 - Remove branch 3 in find at 1030 - Replaced (gab_1 = gab[ri_20]) with (u_105 = ri_20) at 1033 - Remove branch 1 in find at 1030 - Replaced defined condition r_17[ri_93], a[ri_93], ga[ri_93], gb_1[ri_93] with r_17[ri_93], a[ri_93], u_207[ri_93] in find at 839 - Remove branch 2 in find at 839 - Replaced ((gb_2 = gb_1[ri_96]) && (ga_1 = ga[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) with ((iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3)) at 845 - Replaced defined condition r_14[ri_96], r_7[ri_96], a[ri_96], ga[ri_96], gb_1[ri_96] with r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96] in find at 839 - Remove branch 3 in find at 447 - Replaced ((m_4 = m_3[ri_195]) && check2(m_4, pkgen2(rkB), s_2)) with ((gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2)) at 54 - Replaced exp(gb_1, a) with exp(g, mult(b[u_207], a)) at 68 - Remove branch 3 in find at 73 - Replaced (gab = gab[ri_34]) with false at 76 - Remove branch 1 in find at 73 - Replaced defined condition m_3[ri_195], r_3[ri_195] with r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195] in find at 51 yields Game 29 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if Kkey[u_10] = pkgen2(rkB) then yield else if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if Kkey[u_4] = pkgen2(rkB) then yield else if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying move all binders - Move assignment to m_7 - Move assignment to m_5 yields Game 30 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab[ri_32]) && (gab = gab[ri_32]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab = gab_1[ri_30]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab = gab_1[ri_29]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab = x1[ri_28]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab[ri_48]) && (gab = gab[ri_48]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab[ri_46]) && (gab = gab[ri_46]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab = gab_1[ri_44]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab = gab_1[ri_43]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab = x1[ri_42]) then ( event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab[ri_18]) && (gab_1 = gab[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab[ri_27]) && (gab_1 = gab[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab[ri_25]) && (gab_1 = gab[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab[ri_6]) && (x1 = gab[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab[ri_4]) && (x1 = gab[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Proved inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB in game 30 up to probability NB^2 * NA^2 * PCollKey2 + NA^2 * PCollKey1 Applying SA rename gab - Rename variable gab into gab_3, gab_2 yields Game 31 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( {98} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab_2 = gab_1[ri_30]) then ( {144} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab_2 = gab_1[ri_29]) then ( {190} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( {236} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; {276} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( {380} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( {426} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab_3 = gab_1[ri_44]) then ( {472} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab_3 = gab_1[ri_43]) then ( {518} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( {564} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; {604} event endA(A, hostB, ga, gb_1); let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in {657} event beginB(hostA, B, ga_1, gb_2); let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_1 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_1 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_1 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_1 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Removed event at 657 (no longer used in queries) - Removed event at 604 (no longer used in queries) - Removed event at 564 (no longer used in queries) - Removed event at 518 (no longer used in queries) - Removed event at 472 (no longer used in queries) - Removed event at 426 (no longer used in queries) - Removed event at 380 (no longer used in queries) - Removed event at 276 (no longer used in queries) - Removed event at 236 (no longer used in queries) - Removed event at 190 (no longer used in queries) - Removed event at 144 (no longer used in queries) - Removed event at 98 (no longer used in queries) yields Game 32 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_1[ri_30]) && (gab_2 = gab_1[ri_30]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_1[ri_29]) && (gab_2 = gab_1[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_1[ri_44]) && (gab_3 = gab_1[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_1[ri_43]) && (gab_3 = gab_1[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_1 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_1 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_1[ri_16]) && (gab_1 = gab_1[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_1[ri_15]) && (gab_1 = gab_1[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_1 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_1: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_1: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_1 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_1 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_1[ri_23]) && (gab_1 = gab_1[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_1[ri_22]) && (gab_1 = gab_1[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_1 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_1[ri_2]) && (x1 = gab_1[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_1[ri_1]) && (x1 = gab_1[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying SA rename gab_1 - Rename variable gab_1 into gab_9, gab_8, gab_7, gab_6, gab_5, gab_4 yields Game 33 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_5[ri_30]) && (gab_2 = gab_5[ri_30]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_7[ri_30]) && (gab_2 = gab_7[ri_30]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (gab_2 = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_5[ri_44]) && (gab_3 = gab_5[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_35: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_35)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_4: G = exp(g, mult(a[u_108], b)) in let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_5 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_5[ri_16]) && (gab_5 = gab_5[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_7[ri_16]) && (gab_5 = gab_7[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_5 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_5 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_6: G = exp(g, mult(a[u_103], b)) in let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_5[ri_16]) && (gab_7 = gab_5[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_7[ri_16]) && (gab_7 = gab_7[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_8: G = exp(g, mult(a[u_101], b)) in let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_9 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_5[ri_23]) && (gab_9 = gab_5[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_5[ri_2]) && (x1 = gab_5[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on gab_4 (definition removed, all usages removed) - Remove assignments on gab_6 (definition removed, all usages removed) - Remove assignments on gab_8 (definition removed, all usages removed) - Rename variable r_35 into r_39, r_38 yields Game 34 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in {90} find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_5[ri_30]) && {128}(gab_2 = gab_5[ri_30]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_42 = ri_30 <= NB suchthat defined(r_11[ri_30], gab_7[ri_30]) && {163}(gab_2 = gab_7[ri_30]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_19: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_19)); in(cA5[iA], ()); let keyA: D = r_11[u_42] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (gab_2 = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_5[ri_44]) && (gab_3 = gab_5[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {656} find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = exp(g, mult(a[u_105], b)) in {703} find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_5 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_5[ri_16]) && {719}(gab_5 = gab_5[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_7[ri_16]) && {732}(gab_5 = gab_7[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_5 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_5 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in {824} find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_5[ri_16]) && {840}(gab_7 = gab_5[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_28 = ri_16 <= NB suchthat defined(r_11[ri_16], gab_7[ri_16]) && {853}(gab_7 = gab_7[ri_16]) then ( let keyB: D = r_11[u_28] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_9 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_5[ri_23]) && (gab_9 = gab_5[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_5[ri_2]) && (x1 = gab_5[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify [probability NA^2 * PCollKey1 + NA^2 * NB^2 * PCollKey2] - Simplification pass - Replaced defined condition r_21[ri_89], r_13[u_40[ri_89]], a[ri_89], u_207[ri_89] with r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89] in find at 656 - Replaced (gab_7 = gab_7[ri_16]) with false at 853 - Remove branch 3 in find at 824 - Replaced (gab_7 = gab_5[ri_16]) with false at 840 - Remove branch 2 in find at 824 - Replaced defined condition r_19[ri_91], r_11[u_42[ri_91]], a[ri_91], u_207[ri_91] with r_19[ri_91], r_11[u_42[ri_91]], u_207[ri_91] in find at 656 - Replaced (gab_5 = gab_7[ri_16]) with false at 732 - Remove branch 3 in find at 703 - Replaced (gab_5 = gab_5[ri_16]) with false at 719 - Remove branch 2 in find at 703 - Replaced defined condition r_14[ri_96], r_7[ri_96], a[ri_96], u_207[ri_96] with r_14[ri_96], r_7[ri_96], u_207[ri_96] in find at 656 - Replaced (gab_2 = gab_7[ri_30]) with false at 163 - Remove branch 3 in find at 90 - Replaced (gab_2 = gab_5[ri_30]) with false at 128 - Remove branch 2 in find at 90 yields Game 35 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (gab_2 = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_5[ri_44]) && (gab_3 = gab_5[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {586} find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_5 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_5 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_5 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_103 = ri_91 <= NA suchthat defined(r_19[ri_91], r_11[u_42[ri_91]], u_207[ri_91]) && (iB = u_207[ri_91]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_11[u_42[u_103]] ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_9 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_5[ri_23]) && (gab_9 = gab_5[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_5[ri_2]) && (x1 = gab_5[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify - Simplification pass - Remove branch 3 in find at 586 yields Game 36 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = exp(g, mult(b[u_207], a)) in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (gab_2 = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (gab_2 = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (gab_2 = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], gab_2[ri_48]) && (gab_3 = gab_2[ri_48]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_5[ri_44]) && (gab_3 = gab_5[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_5 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_5 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_5 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], gab_2[ri_27]) && (gab_9 = gab_2[ri_27]) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_5[ri_23]) && (gab_9 = gab_5[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], gab_2[ri_6]) && (x1 = gab_2[ri_6]) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_5[ri_2]) && (x1 = gab_5[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder gab_2 - Remove assignments on gab_2 (definition point kept, all usages removed) yields Game 37 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (exp(g, mult(b[u_207], a)) = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (exp(g, mult(b[u_207], a)) = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (exp(g, mult(b[u_207], a)) = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(a[ri_48], b[u_207[ri_48]], gab_2[ri_48], r_7[ri_48]) && (gab_3 = exp(g, mult(b[u_207[ri_48]], a[ri_48]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_5[ri_44]) && (gab_3 = gab_5[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = exp(g, mult(a[u_105], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_5 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_5 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_5 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(a[ri_27], b[u_207[ri_27]], gab_2[ri_27], r_7[ri_27]) && (gab_9 = exp(g, mult(b[u_207[ri_27]], a[ri_27]))) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_5[ri_23]) && (gab_9 = gab_5[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(a[ri_6], b[u_207[ri_6]], gab_2[ri_6], r_7[ri_6]) && (x1 = exp(g, mult(b[u_207[ri_6]], a[ri_6]))) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_5[ri_2]) && (x1 = gab_5[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder gab_5 - Remove assignments on gab_5 (definition point kept, all usages removed) yields Game 38 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (exp(g, mult(b[u_207], a)) = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (exp(g, mult(b[u_207], a)) = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (exp(g, mult(b[u_207], a)) = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(a[ri_48], b[u_207[ri_48]], gab_2[ri_48], r_7[ri_48]) && (gab_3 = exp(g, mult(b[u_207[ri_48]], a[ri_48]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(b[ri_44], a[u_105[ri_44]], gab_5[ri_44], r_11[ri_44]) && (gab_3 = exp(g, mult(a[u_105[ri_44]], b[ri_44]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], gab_7[ri_44]) && (gab_3 = gab_7[ri_44]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (exp(g, mult(a[u_105], b)) = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (exp(g, mult(a[u_105], b)) = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (exp(g, mult(a[u_105], b)) = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = exp(g, mult(a[u_102], b)) in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (gab_7 = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (gab_7 = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (gab_7 = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(a[ri_27], b[u_207[ri_27]], gab_2[ri_27], r_7[ri_27]) && (gab_9 = exp(g, mult(b[u_207[ri_27]], a[ri_27]))) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(b[ri_23], a[u_105[ri_23]], gab_5[ri_23], r_11[ri_23]) && (gab_9 = exp(g, mult(a[u_105[ri_23]], b[ri_23]))) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], gab_7[ri_23]) && (gab_9 = gab_7[ri_23]) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(a[ri_6], b[u_207[ri_6]], gab_2[ri_6], r_7[ri_6]) && (x1 = exp(g, mult(b[u_207[ri_6]], a[ri_6]))) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(b[ri_2], a[u_105[ri_2]], gab_5[ri_2], r_11[ri_2]) && (x1 = exp(g, mult(a[u_105[ri_2]], b[ri_2]))) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], gab_7[ri_2]) && (x1 = gab_7[ri_2]) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of binder gab_7 - Remove assignments on gab_7 (definition point kept, all usages removed) yields Game 39 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (exp(g, mult(b[u_207], a)) = gab_3[ri_32]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (exp(g, mult(b[u_207], a)) = gab_9[ri_29]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (exp(g, mult(b[u_207], a)) = x1[ri_28]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_60 = ri_48 <= NA suchthat defined(a[ri_48], b[u_207[ri_48]], gab_2[ri_48], r_7[ri_48]) && (gab_3 = exp(g, mult(b[u_207[ri_48]], a[ri_48]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(b[ri_44], a[u_105[ri_44]], gab_5[ri_44], r_11[ri_44]) && (gab_3 = exp(g, mult(a[u_105[ri_44]], b[ri_44]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(b[ri_44], a[u_102[ri_44]], gab_7[ri_44], r_11[ri_44]) && (gab_3 = exp(g, mult(a[u_102[ri_44]], b[ri_44]))) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (exp(g, mult(a[u_105], b)) = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (exp(g, mult(a[u_105], b)) = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (exp(g, mult(a[u_105], b)) = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (exp(g, mult(a[u_102], b)) = gab_3[ri_18]) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (exp(g, mult(a[u_102], b)) = gab_9[ri_15]) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (exp(g, mult(a[u_102], b)) = x1[ri_14]) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_39 = ri_27 <= NA suchthat defined(a[ri_27], b[u_207[ri_27]], gab_2[ri_27], r_7[ri_27]) && (gab_9 = exp(g, mult(b[u_207[ri_27]], a[ri_27]))) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(b[ri_23], a[u_105[ri_23]], gab_5[ri_23], r_11[ri_23]) && (gab_9 = exp(g, mult(a[u_105[ri_23]], b[ri_23]))) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(b[ri_23], a[u_102[ri_23]], gab_7[ri_23], r_11[ri_23]) && (gab_9 = exp(g, mult(a[u_102[ri_23]], b[ri_23]))) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(a[ri_6], b[u_207[ri_6]], gab_2[ri_6], r_7[ri_6]) && (x1 = exp(g, mult(b[u_207[ri_6]], a[ri_6]))) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(b[ri_2], a[u_105[ri_2]], gab_5[ri_2], r_11[ri_2]) && (x1 = exp(g, mult(a[u_105[ri_2]], b[ri_2]))) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(b[ri_2], a[u_102[ri_2]], gab_7[ri_2], r_11[ri_2]) && (x1 = exp(g, mult(a[u_102[ri_2]], b[ri_2]))) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying equivalence cdh(exp) with b, a [probability (NA^2 * NB + NB^2 * NA + qH * NA * NB) * pCDH(time_3)] - Equivalence cdh(exp) with variables: b -> b_1, a -> a_1 yields Game 40 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp'(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (let m_10: G = gab_3[ri_32] in {89}find u_221 = ri_221 <= NB suchthat defined(kb[ri_221]) && {91}(encode_idx_b(ri_221) = encode_idx_b(u_207)) then (m_10 = exp'(g, mult(b[u_207], a))) else {109}find else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (let m_11: G = gab_9[ri_29] in {144}find u_222 = ri_223 <= NB suchthat defined(kb[ri_223]) && {146}(encode_idx_b(ri_223) = encode_idx_b(u_207)) then (m_11 = exp'(g, mult(b[u_207], a))) else {164}find else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (let m_12: G = x1[ri_28] in {199}find u_223 = ri_225 <= NB suchthat defined(kb[ri_225]) && {201}(encode_idx_b(ri_225) = encode_idx_b(u_207)) then (m_12 = exp'(g, mult(b[u_207], a))) else {219}find else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, (let ka: bool = cst_bool in a)) in find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], a[ri_48], b[u_207[ri_48]]) && (let m_13: G = gab_3 in {345}find u_224 = ri_227 <= NB suchthat defined(kb[ri_227]) && {347}(encode_idx_b(ri_227) = encode_idx_b(u_207[ri_48])) then (m_13 = exp'(g, mult(b[u_207[ri_48]], a[ri_48]))) else if defined(ka[ri_48]) then (m_13 = exp'(g, mult(b[u_207[ri_48]], a[ri_48]))) else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], a[u_105[ri_44]], b[ri_44]) && (let m_15: G = gab_3 in {451}find u_225 = ri_229 <= NB suchthat defined(kb[ri_229]) && {453}(encode_idx_b(ri_229) = encode_idx_b(ri_44)) then (m_15 = exp'(g, mult(b[ri_44], a[u_105[ri_44]]))) else {470}find else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], a[u_102[ri_44]], b[ri_44]) && (let m_17: G = gab_3 in {507}find u_226 = ri_231 <= NB suchthat defined(kb[ri_231]) && {509}(encode_idx_b(ri_231) = encode_idx_b(ri_44)) then (m_17 = exp'(g, mult(b[ri_44], a[u_102[ri_44]]))) else {526}find else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp'(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (let m_19: G = gab_3[ri_18] in {764}find u_212 = ri_203 <= NB suchthat defined(kb[ri_203]) && {766}(encode_idx_b(ri_203) = encode_idx_b(iB)) then (m_19 = exp'(g, mult(b, a[u_105]))) else {783}find else false) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (let m_21: G = gab_9[ri_15] in {796}find u_213 = ri_205 <= NB suchthat defined(kb[ri_205]) && {798}(encode_idx_b(ri_205) = encode_idx_b(iB)) then (m_21 = exp'(g, mult(b, a[u_105]))) else {815}find else false) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (let m_23: G = x1[ri_14] in {828}find u_214 = ri_207 <= NB suchthat defined(kb[ri_207]) && {830}(encode_idx_b(ri_207) = encode_idx_b(iB)) then (m_23 = exp'(g, mult(b, a[u_105]))) else {847}find else false) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (let m_25: G = gab_3[ri_18] in {885}find u_215 = ri_209 <= NB suchthat defined(kb[ri_209]) && {887}(encode_idx_b(ri_209) = encode_idx_b(iB)) then (m_25 = exp'(g, mult(b, a[u_102]))) else {904}find else false) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (let m_27: G = gab_9[ri_15] in {917}find u_216 = ri_211 <= NB suchthat defined(kb[ri_211]) && {919}(encode_idx_b(ri_211) = encode_idx_b(iB)) then (m_27 = exp'(g, mult(b, a[u_102]))) else {936}find else false) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (let m_29: G = x1[ri_14] in {949}find u_217 = ri_213 <= NB suchthat defined(kb[ri_213]) && {951}(encode_idx_b(ri_213) = encode_idx_b(iB)) then (m_29 = exp'(g, mult(b, a[u_102]))) else {968}find else false) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, (let kb: bool = cst_bool in b)) in find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], a[ri_27], b[u_207[ri_27]]) && (let m_30: G = gab_9 in {1066}find u_218 = ri_215 <= NB suchthat defined(kb[ri_215]) && {1068}(encode_idx_b(ri_215) = encode_idx_b(u_207[ri_27])) then (m_30 = exp'(g, mult(b[u_207[ri_27]], a[ri_27]))) else if defined(ka[ri_27]) then (m_30 = exp'(g, mult(b[u_207[ri_27]], a[ri_27]))) else false) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], a[u_105[ri_23]], b[ri_23]) && (let m_32: G = gab_9 in {1128}find u_219 = ri_217 <= NB suchthat defined(kb[ri_217]) && {1130}(encode_idx_b(ri_217) = encode_idx_b(ri_23)) then (m_32 = exp'(g, mult(b[ri_23], a[u_105[ri_23]]))) else {1147}find else false) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], a[u_102[ri_23]], b[ri_23]) && (let m_34: G = gab_9 in {1162}find u_220 = ri_219 <= NB suchthat defined(kb[ri_219]) && {1164}(encode_idx_b(ri_219) = encode_idx_b(ri_23)) then (m_34 = exp'(g, mult(b[ri_23], a[u_102[ri_23]]))) else {1181}find else false) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], a[ri_6], b[u_207[ri_6]]) && (let m_35: G = x1 in {1238}find u_209 = ri_197 <= NB suchthat defined(kb[ri_197]) && {1240}(encode_idx_b(ri_197) = encode_idx_b(u_207[ri_6])) then (m_35 = exp'(g, mult(b[u_207[ri_6]], a[ri_6]))) else if defined(ka[ri_6]) then (m_35 = exp'(g, mult(b[u_207[ri_6]], a[ri_6]))) else false) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], a[u_105[ri_2]], b[ri_2]) && (let m_37: G = x1 in {1300}find u_210 = ri_199 <= NB suchthat defined(kb[ri_199]) && {1302}(encode_idx_b(ri_199) = encode_idx_b(ri_2)) then (m_37 = exp'(g, mult(b[ri_2], a[u_105[ri_2]]))) else {1319}find else false) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], a[u_102[ri_2]], b[ri_2]) && (let m_39: G = x1 in {1334}find u_211 = ri_201 <= NB suchthat defined(kb[ri_201]) && {1336}(encode_idx_b(ri_201) = encode_idx_b(ri_2)) then (m_39 = exp'(g, mult(b[ri_2], a[u_102[ri_2]]))) else {1353}find else false) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying simplify (non-expanded game) - Simplification pass - Replaced (encode_idx_b(ri_221) = encode_idx_b(u_207)) with false at 91 - Remove branch 1 in find at 89 - Find at 89 removed (else branch kept if any) - Find at 109 removed (else branch kept if any) - Replaced (encode_idx_b(ri_223) = encode_idx_b(u_207)) with false at 146 - Remove branch 1 in find at 144 - Find at 144 removed (else branch kept if any) - Find at 164 removed (else branch kept if any) - Replaced (encode_idx_b(ri_225) = encode_idx_b(u_207)) with false at 201 - Remove branch 1 in find at 199 - Find at 199 removed (else branch kept if any) - Find at 219 removed (else branch kept if any) - Replaced (encode_idx_b(ri_227) = encode_idx_b(u_207[ri_48])) with false at 347 - Remove branch 1 in find at 345 - Find at 345 removed (else branch kept if any) - Replaced (encode_idx_b(ri_229) = encode_idx_b(ri_44)) with false at 453 - Remove branch 1 in find at 451 - Find at 451 removed (else branch kept if any) - Find at 470 removed (else branch kept if any) - Replaced (encode_idx_b(ri_231) = encode_idx_b(ri_44)) with false at 509 - Remove branch 1 in find at 507 - Find at 507 removed (else branch kept if any) - Find at 526 removed (else branch kept if any) - Replaced (encode_idx_b(ri_203) = encode_idx_b(iB)) with false at 766 - Remove branch 1 in find at 764 - Find at 764 removed (else branch kept if any) - Find at 783 removed (else branch kept if any) - Replaced (encode_idx_b(ri_205) = encode_idx_b(iB)) with false at 798 - Remove branch 1 in find at 796 - Find at 796 removed (else branch kept if any) - Find at 815 removed (else branch kept if any) - Replaced (encode_idx_b(ri_207) = encode_idx_b(iB)) with false at 830 - Remove branch 1 in find at 828 - Find at 828 removed (else branch kept if any) - Find at 847 removed (else branch kept if any) - Replaced (encode_idx_b(ri_209) = encode_idx_b(iB)) with false at 887 - Remove branch 1 in find at 885 - Find at 885 removed (else branch kept if any) - Find at 904 removed (else branch kept if any) - Replaced (encode_idx_b(ri_211) = encode_idx_b(iB)) with false at 919 - Remove branch 1 in find at 917 - Find at 917 removed (else branch kept if any) - Find at 936 removed (else branch kept if any) - Replaced (encode_idx_b(ri_213) = encode_idx_b(iB)) with false at 951 - Remove branch 1 in find at 949 - Find at 949 removed (else branch kept if any) - Find at 968 removed (else branch kept if any) - Replaced (encode_idx_b(ri_215) = encode_idx_b(u_207[ri_27])) with false at 1068 - Remove branch 1 in find at 1066 - Find at 1066 removed (else branch kept if any) - Replaced (encode_idx_b(ri_217) = encode_idx_b(ri_23)) with false at 1130 - Remove branch 1 in find at 1128 - Find at 1128 removed (else branch kept if any) - Find at 1147 removed (else branch kept if any) - Replaced (encode_idx_b(ri_219) = encode_idx_b(ri_23)) with false at 1164 - Remove branch 1 in find at 1162 - Find at 1162 removed (else branch kept if any) - Find at 1181 removed (else branch kept if any) - Replaced (encode_idx_b(ri_197) = encode_idx_b(u_207[ri_6])) with false at 1240 - Remove branch 1 in find at 1238 - Find at 1238 removed (else branch kept if any) - Replaced (encode_idx_b(ri_199) = encode_idx_b(ri_2)) with false at 1302 - Remove branch 1 in find at 1300 - Find at 1300 removed (else branch kept if any) - Find at 1319 removed (else branch kept if any) - Replaced (encode_idx_b(ri_201) = encode_idx_b(ri_2)) with false at 1336 - Remove branch 1 in find at 1334 - Find at 1334 removed (else branch kept if any) - Find at 1353 removed (else branch kept if any) yields Game 41 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp'(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in {51} find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in {83} find [unique] u_44 = ri_32 <= NA suchthat defined(r_9[ri_32], gab_3[ri_32]) && (let m_10: G = gab_3[ri_32] in false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_17: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_17)); in(cA5[iA], ()); let keyA: D = r_9[u_44] ) orfind u_41 = ri_29 <= NB suchthat defined(r_12[ri_29], gab_9[ri_29]) && (let m_11: G = gab_9[ri_29] in false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_20: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_20)); in(cA5[iA], ()); let keyA: D = r_12[u_41] ) orfind u_40 = ri_28 <= qH suchthat defined(r_13[ri_28], x1[ri_28]) && (let m_12: G = x1[ri_28] in false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_21: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_21)); in(cA5[iA], ()); let keyA: D = r_13[u_40] ) else new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, (let ka: bool = cst_bool in a)) in {274} find [unique] u_60 = ri_48 <= NA suchthat defined(r_7[ri_48], a[ri_48], b[u_207[ri_48]]) && (let m_13: G = gab_3 in {282}if defined(ka[ri_48]) then (m_13 = exp'(g, mult(b[u_207[ri_48]], a[ri_48]))) else false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_31: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_31)); in(cA5[iA], ()); out(cA6[iA], r_7[u_60]) ) orfind u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], a[u_105[ri_44]], b[ri_44]) && (let m_15: G = gab_3 in false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_38: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_38)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_56 = ri_44 <= NB suchthat defined(r_11[ri_44], a[u_102[ri_44]], b[ri_44]) && (let m_17: G = gab_3 in false) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_39: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_39)); in(cA5[iA], ()); out(cA6[iA], r_11[u_56]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp'(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in {596} find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_7[u_108] ) orfind u_105 = ri_93 <= NA suchthat defined(r_17[ri_93], a[ri_93], u_207[ri_93]) && (iB = u_207[ri_93]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_5: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (let m_19: G = gab_3[ri_18] in false) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (let m_21: G = gab_9[ri_15] in false) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (let m_23: G = x1[ri_14] in false) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_102 = ri_90 <= NA suchthat defined(r_20[ri_90], a[ri_90], u_207[ri_90]) && (iB = u_207[ri_90]) && check2(m1_1, pkgen2(rkA), s_3) then ( let gab_7: G = cst_G in find [unique] u_30 = ri_18 <= NA suchthat defined(r_9[ri_18], gab_3[ri_18]) && (let m_25: G = gab_3[ri_18] in false) then ( let keyB: D = r_9[u_30] ) orfind u_27 = ri_15 <= NB suchthat defined(r_12[ri_15], gab_9[ri_15]) && (let m_27: G = gab_9[ri_15] in false) then ( let keyB: D = r_12[u_27] ) orfind u_26 = ri_14 <= qH suchthat defined(r_13[ri_14], x1[ri_14]) && (let m_29: G = x1[ri_14] in false) then ( let keyB: D = r_13[u_26] ) else new r_11: D; let keyB: D = r_11 ) orfind u_101 = ri_89 <= NA suchthat defined(r_21[ri_89], r_13[u_40[ri_89]], u_207[ri_89]) && (iB = u_207[ri_89]) && check2(m1_1, pkgen2(rkA), s_3) then ( let keyB: D = r_13[u_40[u_101]] ) ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, (let kb: bool = cst_bool in b)) in {815} find [unique] u_39 = ri_27 <= NA suchthat defined(r_7[ri_27], a[ri_27], b[u_207[ri_27]]) && (let m_30: G = gab_9 in {823}if defined(ka[ri_27]) then (m_30 = exp'(g, mult(b[u_207[ri_27]], a[ri_27]))) else false) then out(cB4[iB], r_7[u_39]) orfind u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], a[u_105[ri_23]], b[ri_23]) && (let m_32: G = gab_9 in false) then out(cB4[iB], r_11[u_35]) orfind u_35 = ri_23 <= NB suchthat defined(r_11[ri_23], a[u_102[ri_23]], b[ri_23]) && (let m_34: G = gab_9 in false) then out(cB4[iB], r_11[u_35]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); {927} find [unique] u_18 = ri_6 <= NA suchthat defined(r_7[ri_6], a[ri_6], b[u_207[ri_6]]) && (let m_35: G = x1 in {935}if defined(ka[ri_6]) then (m_35 = exp'(g, mult(b[u_207[ri_6]], a[ri_6]))) else false) then out(ch2[iH], r_7[u_18]) orfind u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], a[u_105[ri_2]], b[ri_2]) && (let m_37: G = x1 in false) then out(ch2[iH], r_11[u_14]) orfind u_14 = ri_2 <= NB suchthat defined(r_11[ri_2], a[u_102[ri_2]], b[ri_2]) && (let m_39: G = x1 in false) then out(ch2[iH], r_11[u_14]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying expand - Expand if/find/let - Remove branch 1 in find at 935 - Find at 935 removed (else branch kept if any) - Remove branch 4 in find at 927 - Remove branch 3 in find at 927 - Remove branch 1 in find at 927 - Remove branch 1 in find at 823 - Find at 823 removed (else branch kept if any) - Remove branch 4 in find at 815 - Remove branch 3 in find at 815 - Remove branch 1 in find at 815 - Remove branch 4 in find at 596 - Remove branch 3 in find at 596 - Remove branch 2 in find at 596 - Remove branch 1 in find at 282 - Find at 282 removed (else branch kept if any) - Remove branch 4 in find at 274 - Remove branch 3 in find at 274 - Remove branch 1 in find at 274 - Remove branch 3 in find at 83 - Remove branch 2 in find at 83 - Remove branch 1 in find at 83 - Find at 83 removed (else branch kept if any) - Replaced defined condition r_3[ri_195], b[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195] with r_3[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195] in find at 51 yields Game 42 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp'(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then let gab_2: G = cst_G in new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let ka: bool = cst_bool in let gab_3: G = exp(gb_1, a) in find [unique] u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp'(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then let keyB: D = r_7[u_108] ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let kb: bool = cst_bool in let gab_9: G = exp(ga_1, b) in find [unique] u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Applying remove assignments of findcond - Remove assignments on kb (definition removed, all usages removed) - Remove assignments on gab_2 (definition removed, all usages removed) - Remove assignments on ka (definition removed, all usages removed) yields Game 43 is in(start, ()); new rkA: keyseed; new rkB: keyseed; out(cstart, (pkgen2(rkA), pkgen2(rkB))); (( ! iA <= NA in(cA1[iA], hostB: host); new a: Z; let ga: G = exp'(g, a) in out(cA2[iA], (A, hostB, ga)); in(cA3[iA], (=A, =hostB, gb_1: G, s_2: signature)); find u_6 = u_7 <= NK suchthat defined(keys_5[u_7]) && (keys_5[u_7] = hostB) then ( let m_4: blocksize = concatB(A, hostB, ga, gb_1) in find u_207 = ri_195 <= NB suchthat defined(r_3[ri_195], hostA[ri_195], ga_1[ri_195], gb_2[ri_195]) && (gb_1 = gb_2[ri_195]) && (ga = ga_1[ri_195]) && (A = hostA[ri_195]) && check2(m_4, pkgen2(rkB), s_2) then new r_7: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_14: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_14)); in(cA5[iA], ()); let keyA: D = r_7 ) orfind u_8 = u_9 <= NK suchthat defined(keys_3[u_9]) && (keys_3[u_9] = hostB) then yield orfind u_10 = u_11 <= NK suchthat defined(Khost[u_11], Kkey[u_11], keys_1[u_11]) && (Khost[u_11] = hostB) then ( if Kkey[u_10] = pkgen2(rkA) then yield else if Kkey[u_10] = pkgen2(rkB) then yield else let m_5: blocksize = concatB(A, hostB, ga, gb_1) in if check(m_5, Kkey[u_10], s_2) then let gab_3: G = exp(gb_1, a) in find [unique] u_58 = ri_46 <= NA suchthat defined(r_9[ri_46], gab_3[ri_46]) && (gab_3 = gab_3[ri_46]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_33: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_33)); in(cA5[iA], ()); out(cA6[iA], r_9[u_58]) ) orfind u_55 = ri_43 <= NB suchthat defined(r_12[ri_43], gab_9[ri_43]) && (gab_3 = gab_9[ri_43]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_36: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_36)); in(cA5[iA], ()); out(cA6[iA], r_12[u_55]) ) orfind u_54 = ri_42 <= qH suchthat defined(r_13[ri_42], x1[ri_42]) && (gab_3 = x1[ri_42]) then ( let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_37: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_37)); in(cA5[iA], ()); out(cA6[iA], r_13[u_54]) ) else new r_9: D; let m_2: blocksize = concatA(A, hostB, ga, gb_1) in new r_30: sign_seed; out(cA4[iA], sign_r2(m_2, skgen2(rkA), r_30)); in(cA5[iA], ()); out(cA6[iA], r_9) ) ) | ( ! iB <= NB in(cB1[iB], (hostA: host, =B, ga_1: G)); new b: Z; let gb_2: G = exp'(g, b) in let m_3: blocksize = concatB(hostA, B, ga_1, gb_2) in new r_3: sign_seed; out(cB2[iB], (hostA, B, gb_2, sign_r2(m_3, skgen2(rkB), r_3))); in(cB3[iB], s_3: signature); find u = u_1 <= NK suchthat defined(keys_5[u_1]) && (keys_5[u_1] = hostA) then yield orfind u_2 = u_3 <= NK suchthat defined(keys_3[u_3]) && (keys_3[u_3] = hostA) then ( let m1_1: blocksize = concatA(hostA, B, ga_1, gb_2) in find u_108 = ri_96 <= NA suchthat defined(r_14[ri_96], r_7[ri_96], u_207[ri_96]) && (iB = u_207[ri_96]) && check2(m1_1, pkgen2(rkA), s_3) then let keyB: D = r_7[u_108] ) orfind u_4 = u_5 <= NK suchthat defined(Khost[u_5], Kkey[u_5], keys_1[u_5]) && (Khost[u_5] = hostA) then ( if Kkey[u_4] = pkgen2(rkA) then yield else if Kkey[u_4] = pkgen2(rkB) then yield else let m_7: blocksize = concatA(hostA, B, ga_1, gb_2) in if check(m_7, Kkey[u_4], s_3) then let gab_9: G = exp(ga_1, b) in find [unique] u_37 = ri_25 <= NA suchthat defined(r_9[ri_25], gab_3[ri_25]) && (gab_9 = gab_3[ri_25]) then out(cB4[iB], r_9[u_37]) orfind u_34 = ri_22 <= NB suchthat defined(r_12[ri_22], gab_9[ri_22]) && (gab_9 = gab_9[ri_22]) then out(cB4[iB], r_12[u_34]) orfind u_33 = ri_21 <= qH suchthat defined(r_13[ri_21], x1[ri_21]) && (gab_9 = x1[ri_21]) then out(cB4[iB], r_13[u_33]) else new r_12: D; out(cB4[iB], r_12) ) ) | ( ! iH <= qH in(ch1[iH], x1: G); find [unique] u_16 = ri_4 <= NA suchthat defined(r_9[ri_4], gab_3[ri_4]) && (x1 = gab_3[ri_4]) then out(ch2[iH], r_9[u_16]) orfind u_13 = ri_1 <= NB suchthat defined(r_12[ri_1], gab_9[ri_1]) && (x1 = gab_9[ri_1]) then out(ch2[iH], r_12[u_13]) orfind u_12 = ri <= qH suchthat defined(r_13[ri], x1[ri]) && (x1 = x1[ri]) then out(ch2[iH], r_13[u_12]) else new r_13: D; out(ch2[iH], r_13) ) | ( ! iK <= NK in(cK[iK], (Khost: host, Kkey: pkey)); if Khost = B then ( let keys_5: host = B ) else if Khost = A then ( let keys_3: host = A ) else let keys_1: host = cst_host )) Proved secrecy of keyB in game 43 Proved secrecy of keyA in game 43 Adv[Game 1: inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB] <= Psigncoll + Psign(time_1, NA) + Adv[Game 22: inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB] Adv[Game 22: inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB] <= NB^2 * PCollKey1 + NA^2 * NB^2 * PCollKey2 RESULT Proved inj-event(endB(A, B, x, y)) ==> inj-event(endA(A, B, x, y)) with public variables keyA, keyB up to probability Psigncoll + Psign(time_1, NA) + NB^2 * PCollKey1 + NA^2 * NB^2 * PCollKey2 Adv[Game 1: inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB] <= (NB^2 + NA^2) * PCollKey1 + NB^2 * NA^2 * PCollKey2 + Psign(time_2, NB) + Psigncoll + Psign(time_1, NA) + Adv[Game 30: inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB] Adv[Game 30: inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB] <= NB^2 * NA^2 * PCollKey2 + NA^2 * PCollKey1 RESULT Proved inj-event(endA(A, B, x, y)) ==> inj-event(beginB(A, B, x, y)) with public variables keyA, keyB up to probability (NB^2 + 2 * NA^2) * PCollKey1 + Psign(time_2, NB) + Psigncoll + Psign(time_1, NA) + 2 * NB^2 * NA^2 * PCollKey2 Adv[Game 1: secrecy of keyB] <= (2 * qH * NA * NB + 2 * NB^2 * NA + 2 * NA^2 * NB) * pCDH(time_3) + (2 * NB^2 + 4 * NA^2) * PCollKey1 + 4 * NB^2 * NA^2 * PCollKey2 + 2 * Psign(time_2, NB) + 2 * Psigncoll + 2 * Psign(time_1, NA) + Adv[Game 43: secrecy of keyB] Adv[Game 43: secrecy of keyB] <= 0 RESULT Proved secrecy of keyB up to probability (2 * qH * NA * NB + 2 * NB^2 * NA + 2 * NA^2 * NB) * pCDH(time_3) + (2 * NB^2 + 4 * NA^2) * PCollKey1 + 4 * NB^2 * NA^2 * PCollKey2 + 2 * Psign(time_2, NB) + 2 * Psigncoll + 2 * Psign(time_1, NA) Adv[Game 1: secrecy of keyA] <= (2 * qH * NA * NB + 2 * NB^2 * NA + 2 * NA^2 * NB) * pCDH(time_3) + (2 * NB^2 + 4 * NA^2) * PCollKey1 + 4 * NB^2 * NA^2 * PCollKey2 + 2 * Psign(time_2, NB) + 2 * Psigncoll + 2 * Psign(time_1, NA) + Adv[Game 43: secrecy of keyA] Adv[Game 43: secrecy of keyA] <= 0 RESULT Proved secrecy of keyA up to probability (2 * qH * NA * NB + 2 * NB^2 * NA + 2 * NA^2 * NB) * pCDH(time_3) + (2 * NB^2 + 4 * NA^2) * PCollKey1 + 4 * NB^2 * NA^2 * PCollKey2 + 2 * Psign(time_2, NB) + 2 * Psigncoll + 2 * Psign(time_1, NA) RESULT time_1 = time(skgen) + time(pkgen) + (NA + NB) * time(concatB) + (2 * NA + 2 * NB) * time(exp) + NA * time(([1,NA])) + (NA + NB) * time(concatA) + NB * time(sign_r) + 2 * NB * time(([1,NB])) + time + (2 * NA + 2 * NB - 1) * time(check) RESULT time_2 = (1 + NA + 7 * NB * NA + NB) * time(pkgen2) + (NA + NB) * time(concatB) + (2 * NA + 2 * NB) * time(exp) + NA * time(([1,NA])) + (NA + NB) * time(concatA) + NA * time(sign_r2) + NA * time(skgen2) + 7 * NB * NA * time(check2) + NB * time(mult) + 2 * NB * time(([1,NB])) + time + (2 * NA + 2 * NB - 1) * time(check) RESULT time_3 = (2 + 2 * NA + 5 * NB * NA + 2 * NB) * time(pkgen2) + (NA + NB) * time(concatB) + (NA + NB) * time(check) + (NA + NB) * time(concatA) + (NA + NB) * time(sign_r2) + (NA + NB) * time(skgen2) + 5 * NB * NA * time(check2) + time + (NA^2 + NB * NA + qH * NA + 2 * NB + 2 * NA - 3) * time(exp) All queries proved.