usertype Server, SessionKey, Token, SymmetricKey; secret k: Function; const Alice, Bob, Charlie, Eve: Agent; const Simon: Server; /* give the intruder something to work with */ const ne: Nonce; const ke: SessionKey; untrusted Eve; compromised k(Eve,Simon); const authToken: Token; protocol woolamce(A,B,S) { role B { var Na: Nonce; const Nb: Nonce; var Kab: SessionKey; var Kas : SymmetricKey; read_1(A,B, A,Na); send_2(B,A, B,Nb); read_3(A,B, { A,(B,(Na,Nb)) }Kas ); send_4(B,S, { A,(B,(Na,Nb)) }Kas, { A,(B,(Na,Nb)) }k(B,S) ); read_5(S,B, { B,(Na,(Nb,Kab)) }Kas, { A,(Na,(Nb,Kab)) }k(B,S) ); send_6(B,A, { B,(Na,(Nb,Kab)) }Kas, { Na,Nb }Kab ); read_7(A,B, { Nb }Kab ); claim_8(B,Secret,authToken); } } run woolamce.B(Agent,Agent,Simon); run woolamce.B(Agent,Agent,Simon);