packages feed

cpsa-3.6.8: tst/wd-gs-simple.scm

(herald "Wrap-Decrypt example, simplified"
	(bound 24)
	(limit 500)
	(goals-sat)
	)

;; In this version, the redirect URI is registered ahead of time
;; and is not carried in the auth or access messages

(defprotocol wrap-decrypt-simple basic
   (defrole create-key
     (vars (k skey))
     (trace
      (recv (cat "CREATE"))
      (send (cat "CREATED" (hash k)))
      (init k))
     (uniq-gen k)
     )
   (defrole do-decrypt
     (vars (k skey) (m mesg))
     (trace
      (recv (cat "DECRYPT" (hash k) (enc m k)))
      (obsv k)
      (send m)))
   (defrole do-wrap
     (vars (wk ck skey) (cktype mesg))
     (trace
      (recv (cat "WRAP" (hash wk) (hash ck)))
      (obsv wk)
      (obsv ck)
      (send (enc ck wk))
      )
     (neq (ck wk))
    )
   ;; --------- RULES -------------
   )

(defgoal wrap-decrypt-simple
  (forall ((z0 z1 strd) (k skey))
  (implies
   (and (p "create-key" z0 3)
	(p "create-key" "k" z0 k)
	(p "" z1 1)
	(p "" "x" z1 k)
	)
   (or
    ;; This is not the first instance of a key leaking
    (exists ((z2 z3 z4 z5 strd) (k2 k3 skey))
	   (and
	    (p "create-key" z2 2)
	    (p "create-key" "k" z2 k2)
	    (p "create-key" z4 2)
	    (p "create-key" "k" z4 k3)
	    (p "" z3 1)
	    (p "" "x" z3 k2)
	    (p "" z5 1)
	    (p "" "x" z5 k3)
	    (prec z3 1 z5 0)))
    ;; A key was used to decrypt after wrapping.
    (exists ((z2 z3 strd) (k2 skey))
	    (and
	     (p "do-decrypt" z2 3)
	     (p "do-decrypt" "k" z2 k2)
	     (p "do-wrap" z3 4)
	     (p "do-wrap" "wk" z3 k2)
	     (prec z3 3 z2 0)
	     ))))))