# Wide Mouthed Frog # # Modelled after the description in the SPORE library # http://www.lsv.ens-cachan.fr/spore/wideMouthedFrog.html # usertype Key; usertype TimeStamp; secret k: Function; protocol wmf(I,R,S) { role I { const Kir: Key; const Ti: TimeStamp; var Kr: Key; send_1(I,S, I, {Ti, R, Kir}k(I,S)); claim_I1(I,Secret,Kir); } role R { var Ts: TimeStamp; var Kir: Key; read_2(S,R, {Ts, I, Kir}k(R,S) ); claim_R1(R,Secret,Kir); claim_R2(R,Nisynch); } role S { var Kir: Key; const Ts: TimeStamp; var Ti: TimeStamp; read_1(I,S, I,{Ti, R, Kir}k(I,S) ); send_2(S,R, {Ts, I, Kir}k(R,S)); } } const Alice,Bob,Eve,Simon: Agent; const Ke: Key; const Te: TimeStamp; untrusted Eve; compromised k(Eve,Simon); run wmf.I (Agent,Agent,Simon); run wmf.R (Agent,Agent,Simon); run wmf.S (Agent,Agent,Simon);