# Lowe's modified version of Yahalom # # Modelled after the description in the SPORE library # http://www.lsv.ens-cachan.fr/spore/yahalomLowe.html # # secret k : Function; usertype SessionKey; protocol yahalom-Lowe(I,R,S) { role I { const Ni: Nonce; var Nr: Nonce; var Kir: SessionKey; send_1(I,R, I,Ni); read_3(S,I, {R,Kir,Ni,Nr}k(I,S) ); send_5(I,R, {I, R, S, Nr}Kir ); claim_I1(I, Secret,Kir); claim_I2(I, Nisynch); } role R { const Nr: Nonce; var Ni: Nonce; var Kir: SessionKey; read_1(I,R, I,Ni); send_2(R,S, {I,Ni,Nr}k(R,S) ); read_4(S,R, {I,Kir}k(R,S)); read_5(I,R, {I, R, S, Nr}Kir); claim_R1(R, Secret,Kir); claim_R2(R, Nisynch); } role S { const Kir: SessionKey; var Ni,Nr: Nonce; read_2(R,S, {I,Ni,Nr}k(R,S) ); send_3(S,I, {R,Kir,Ni,Nr}k(I,S)); send_4(S,R, {I,Kir}k(R,S)); } } const Alice,Bob,Simon : Agent;