From: A secure and privacy-preserving authentication protocol for wireless sensor networks in smart city
(*processsensornode*) let processsensornode =    in(ch2,SIDj:bitstring);   new b:bitstring;   new T2:bitstring;   let Ts = G(b)in   let M2 = XOR(Ts,hash(concat(GWNPSj,T2))) in   let M3 = hash(concat(SIDj,concat(GWNPSj,concat(Ts,T2)))) in   out(ch2,(SIDj,M2,M3,T2));   in(ch2,(M4:bitstring,M5:bitstring,T3:bitstring));   let (Tu:bitstring,UIDi:bitstring,SIDj:bitstring,T3:bitstring) = D(GWNPSj,M4) in   let M5' = hash(concat(GWNPSj,concat(Tu,concat(UIDi,concat(SIDj,T3))))) in   if M5 = M5' then   event sensorAccept(gwn);   let SKsu = hash(concat(GK(b,Ts),concat(UIDi,concat(SIDj,T3)))) in   new T4:bitstring;   let Vs = hash(concat(SKsu,T4))in   out(ch3,(Vs,T4));   in(ch3,(Vu:bitstring,T5:bitstring));   let Vu' = hash(concat(SKsu,T5))in   if Vu' = Vu then   event Sksuccessful(ui,sj) |  |