cpsa-4.4.4: tst/dhcr_um_exercise_resolved_bug_shapes.tst
(comment "CPSA 4.3.1")
(comment "Extracted shapes")
(herald "DHCR: unified model (UM) original" (bound 20) (limit 12000)
(algebra diffie-hellman))
(comment "CPSA 4.3.1")
(comment "All input read from tst/dhcr_um_exercise_resolved_bug.scm")
(comment "Step count limited to 12000")
(comment "Strand count bounded at 20")
(defprotocol dhcr-um diffie-hellman
(defrole init
(vars (l x rndx) (gb gy base) (a b name) (na nb data)
(priv-stor locn))
(trace (load priv-stor (pv a l))
(recv (sig (body b gb (pubk "sig" b)) (privk "sig" b)))
(send (cat na a b (exp (gen) x)))
(recv (cat gy (enc na nb a b (hash (exp gb l) (exp gy x)))))
(send nb))
(uniq-orig na)
(uniq-gen x)
(absent (x l))
(gen-st (pv a l))
(fn-of ("principal-of" (ltxa a) (ltxb b))
("ltx-of" (a ltxa) (b ltxb))))
(defrole resp
(vars (l y rndx) (ga gx base) (a b name) (na nb data)
(priv-stor locn))
(trace (load priv-stor (pv b l))
(recv (sig (body a ga (pubk "sig" a)) (privk "sig" a)))
(recv (cat na a b gx))
(send
(cat (exp (gen) y)
(enc na nb a b (hash (exp ga l) (exp gx y))))) (recv nb))
(uniq-orig nb)
(uniq-gen y)
(absent (y l))
(facts (neq gx (gen)))
(gen-st (pv b l))
(fn-of ("principal-of" (ltxa a) (ltxb b))
("ltx-of" (a ltxa) (b ltxb))))
(defrole ltx-gen
(vars (self name) (l rndx) (priv-stor locn) (ignore mesg))
(trace (load priv-stor ignore) (stor priv-stor (pv self l))
(send
(sig (body self (exp (gen) l) (pubk "sig" self))
(privk "sig" self))))
(uniq-orig l)
(fn-of ("principal-of" (l self)) ("ltx-of" (self l))))
(defrole ltx-disclose
(vars (self name) (l rndx) (priv-stor locn))
(trace (load priv-stor (pv self l)) (stor priv-stor "nil") (send l))
(gen-st (pv self l))
(fn-of ("principal-of" (l self)) ("ltx-of" (self l))))
(defrule fact-resp-silly
(forall ((z strd) (gx base))
(implies
(and (p "resp" z 3) (p "resp" "gx" z gx))
(fact silly gx))))
(defrule fact-resp-neq0
(forall ((z strd))
(implies (and (p "resp" z 3) (p "resp" "gx" z (gen))) (false))))
(defrule fact-init-neq0
(forall ((z strd))
(implies (and (p "init" z 4) (p "init" "gy" z (gen))) (false))))
(defrule undisclosed-not-disclosed
(forall ((z strd) (l rndx))
(implies
(and (fact undisclosed l) (p "ltx-disclose" z 2)
(p "ltx-disclose" "l" z l))
(false))))
(defgenrule neqRl_indx
(forall ((x indx)) (implies (fact neq x x) (false))))
(defgenrule neqRl_strd
(forall ((x strd)) (implies (fact neq x x) (false))))
(defgenrule neqRl_mesg
(forall ((x mesg)) (implies (fact neq x x) (false))))
(defgenrule shearsRule
(forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
(implies
(and (trans z0 i0) (trans z1 i1) (trans z2 i2)
(leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
(prec z0 i0 z2 i2))
(or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
(defgenrule invShearsRule
(forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
(implies
(and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
(leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
(or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1)))))
(defgenrule fact-resp-neq0
(forall ((z strd) (gx base))
(implies (and (p "resp" z 3) (p "resp" "gx" z gx))
(fact neq gx (gen)))))
(defgenrule trRl_ltx-gen-at-1
(forall ((z strd)) (implies (p "ltx-gen" z 2) (trans z 1))))
(defgenrule trRl_ltx-gen-at-0
(forall ((z strd)) (implies (p "ltx-gen" z 2) (trans z 0))))
(defgenrule trRl_ltx-disclose-at-1
(forall ((z strd)) (implies (p "ltx-disclose" z 2) (trans z 1))))
(defgenrule trRl_ltx-disclose-at-0
(forall ((z strd)) (implies (p "ltx-disclose" z 2) (trans z 0))))
(defgenrule gen-st-init-0
(forall ((z strd) (l rndx) (a name))
(implies
(and (p "init" z 1) (p "init" "l" z l) (p "init" "a" z a))
(gen-st (pv a l)))))
(defgenrule gen-st-resp-0
(forall ((z strd) (l rndx) (b name))
(implies
(and (p "resp" z 1) (p "resp" "l" z l) (p "resp" "b" z b))
(gen-st (pv b l)))))
(defgenrule gen-st-ltx-disclose-0
(forall ((z strd) (l rndx) (self name))
(implies
(and (p "ltx-disclose" z 1) (p "ltx-disclose" "l" z l)
(p "ltx-disclose" "self" z self)) (gen-st (pv self l)))))
(lang (sig sign) (body (tuple 3)) (pv (tuple 2))))
(defskeleton dhcr-um
(vars (na nb data) (a b name) (pt pval) (gy base) (priv-stor locn)
(l l-peer x rndx))
(defstrand init 4 (na na) (nb nb) (a a) (b b) (gb (exp (gen) l-peer))
(gy gy) (priv-stor priv-stor) (l l) (x x))
(non-orig (privk "sig" b))
(uniq-orig na)
(uniq-gen x)
(absent (x l))
(facts (neq a b) (undisclosed l) (undisclosed l-peer))
(traces
((load priv-stor (cat pt (pv a l)))
(recv
(sig (body b (exp (gen) l-peer) (pubk "sig" b))
(privk "sig" b))) (send (cat na a b (exp (gen) x)))
(recv
(cat gy
(enc na nb a b
(hash (exp (gen) (mul l l-peer)) (exp gy x)))))))
(label 0)
(unrealized (0 1) (0 3))
(origs (na (0 2)))
(comment "Not closed under rules"))
(defskeleton dhcr-um
(vars (ignore ignore-0 mesg) (na nb data) (b self name)
(pt pt-0 pt-1 pt-2 pval) (priv-stor priv-stor-0 locn)
(y l l-0 x rndx))
(defstrand init 4 (na na) (nb nb) (a self) (b b) (gb (exp (gen) l))
(gy (exp (gen) y)) (priv-stor priv-stor-0) (l l-0) (x x))
(defstrand ltx-gen 3 (ignore ignore) (self b) (priv-stor priv-stor)
(l l))
(defstrand resp 4 (na na) (nb nb) (a self) (b b) (ga (exp (gen) l-0))
(gx (exp (gen) x)) (priv-stor priv-stor) (l l) (y y))
(defstrand ltx-gen 3 (ignore ignore-0) (self self)
(priv-stor priv-stor-0) (l l-0))
(precedes ((0 2) (2 2)) ((1 1) (2 0)) ((1 2) (0 1)) ((2 3) (0 3))
((3 1) (0 0)) ((3 2) (2 1)))
(non-orig (privk "sig" b))
(uniq-orig na nb l l-0)
(uniq-gen y x)
(absent (y l) (x l-0))
(gen-st (pv b l) (pv self l-0))
(facts (silly (exp (gen) x)) (neq (exp (gen) x) (gen)) (trans 1 1)
(trans 1 0) (trans 3 1) (trans 3 0) (neq self b) (undisclosed l-0)
(undisclosed l))
(operation nonce-test (displaced 4 0 init 3) (exp (gen) x-0) (2 2))
(traces
((load priv-stor-0 (cat pt-2 (pv self l-0)))
(recv (sig (body b (exp (gen) l) (pubk "sig" b)) (privk "sig" b)))
(send (cat na self b (exp (gen) x)))
(recv
(cat (exp (gen) y)
(enc na nb self b
(hash (exp (gen) (mul l l-0)) (exp (gen) (mul y x)))))))
((load priv-stor (cat pt ignore))
(stor priv-stor (cat pt-0 (pv b l)))
(send
(sig (body b (exp (gen) l) (pubk "sig" b)) (privk "sig" b))))
((load priv-stor (cat pt-0 (pv b l)))
(recv
(sig (body self (exp (gen) l-0) (pubk "sig" self))
(privk "sig" self))) (recv (cat na self b (exp (gen) x)))
(send
(cat (exp (gen) y)
(enc na nb self b
(hash (exp (gen) (mul l l-0)) (exp (gen) (mul y x)))))))
((load priv-stor-0 (cat pt-1 ignore-0))
(stor priv-stor-0 (cat pt-2 (pv self l-0)))
(send
(sig (body self (exp (gen) l-0) (pubk "sig" self))
(privk "sig" self)))))
(label 18)
(parent 0)
(realized)
(shape)
(maps
((0)
((a self) (b b) (l l-0) (l-peer l) (x x) (gy (exp (gen) y))
(na na) (nb nb) (priv-stor priv-stor-0) (pt pt-2))))
(origs (na (0 2)) (l-0 (3 1)) (pt-2 (3 1)) (l (1 1)) (pt-0 (1 1))
(nb (2 3))))
(defskeleton dhcr-um
(vars (ignore ignore-0 mesg) (na nb data) (b self name)
(pt pt-0 pt-1 pt-2 pval) (priv-stor priv-stor-0 locn) (y l rndx)
(w expt) (l-0 x rndx))
(defstrand init 4 (na na) (nb nb) (a self) (b b) (gb (exp (gen) l))
(gy (exp (gen) (mul y w))) (priv-stor priv-stor-0) (l l-0) (x x))
(defstrand ltx-gen 3 (ignore ignore) (self b) (priv-stor priv-stor)
(l l))
(defstrand resp 4 (na na) (nb nb) (a self) (b b) (ga (exp (gen) l-0))
(gx (exp (gen) (mul w x))) (priv-stor priv-stor) (l l) (y y))
(defstrand ltx-gen 3 (ignore ignore-0) (self self)
(priv-stor priv-stor-0) (l l-0))
(precedes ((0 2) (2 2)) ((1 1) (2 0)) ((1 2) (0 1)) ((2 3) (0 3))
((3 1) (0 0)) ((3 2) (2 1)))
(non-orig (privk "sig" b))
(uniq-orig na nb l l-0)
(uniq-gen y x)
(absent (y l) (x l-0))
(gen-st (pv b l) (pv self l-0))
(facts (silly (exp (gen) (mul w x))) (neq (exp (gen) (mul w x)) (gen))
(trans 1 1) (trans 1 0) (trans 3 1) (trans 3 0) (neq self b)
(undisclosed l-0) (undisclosed l))
(operation generalization deleted (4 0))
(traces
((load priv-stor-0 (cat pt-2 (pv self l-0)))
(recv (sig (body b (exp (gen) l) (pubk "sig" b)) (privk "sig" b)))
(send (cat na self b (exp (gen) x)))
(recv
(cat (exp (gen) (mul y w))
(enc na nb self b
(hash (exp (gen) (mul l l-0)) (exp (gen) (mul y w x)))))))
((load priv-stor (cat pt ignore))
(stor priv-stor (cat pt-0 (pv b l)))
(send
(sig (body b (exp (gen) l) (pubk "sig" b)) (privk "sig" b))))
((load priv-stor (cat pt-0 (pv b l)))
(recv
(sig (body self (exp (gen) l-0) (pubk "sig" self))
(privk "sig" self)))
(recv (cat na self b (exp (gen) (mul w x))))
(send
(cat (exp (gen) y)
(enc na nb self b
(hash (exp (gen) (mul l l-0)) (exp (gen) (mul y w x)))))))
((load priv-stor-0 (cat pt-1 ignore-0))
(stor priv-stor-0 (cat pt-2 (pv self l-0)))
(send
(sig (body self (exp (gen) l-0) (pubk "sig" self))
(privk "sig" self)))))
(label 90)
(parent 0)
(realized)
(shape)
(maps
((0)
((a self) (b b) (l l-0) (l-peer l) (x x)
(gy (exp (gen) (mul y w))) (na na) (nb nb)
(priv-stor priv-stor-0) (pt pt-2))))
(origs (na (0 2)) (l-0 (3 1)) (pt-2 (3 1)) (l (1 1)) (pt-0 (1 1))
(nb (2 3))))
(comment "Nothing left to do")