// BAN modified version of the yahalom protocol
// Type flaw
// This version actually works!

usertype Server;

const a,b,c : Agent;
const s : Server;
secret k : Function;




protocol yahalomBan(A,B,S)
{
	role A
	{
		fresh na;
		var nb;
		var ticket;
		var kab;

		send_1(A,B, A,na);
		recv_3(S,A, nb, {B,kab,na}k(A,S), ticket );
		send_4(A,B, ticket, {nb}kab );
		claim_5(A, Secret,kab);
	}

	role B
	{
		fresh nb;
		var na;
		var ticket;
		var kab;

		recv_1(A,B, A,na);
		send_2(B,S, B,nb, {A,na}k(B,S) );
		recv_4(A,B, {A,kab,nb}k(B,S) , {nb}kab );
		claim_6(B, Secret,kab);
	}

	role S
	{
		fresh kab;
		var na,nb;

		recv_2(B,S, B,nb, {A,na}k(B,S) );
		send_3(S,A, nb, {B,kab,na}k(A,S), {A,kab,nb}k(B,S) );
	}
}

