role aserver (ASj, Ui, RC: agent, | SKey1 : symmetric_key, | SKey2 : symmetric_key, | % H is hash function | H,MUL,SUB: hash_func, | Snd, Rcv: channel(dy) ) | played_by ASj | def= | local State : nat, | IDi, IDj, Ej, Dj, Yj: text, | M5, M9, Ri, M4, Rj, Rij, SKj, M6: message, | Inc : hash_func | const user_rserver, rserver_aserver, | aserver_user, sec1, sec2, sec3, sec4, sec5, | sec6 : protocol_id | init State ≔0 | transition | 1. State = 0 ∧ Rcv(start) | State' ≔ 1 ∧ IDj' ≔new() | ∧ Snd(IDj'}_SKey1) | ∧ Rcv(Ej.Dj}_SKey1) | 2. State = 1 ∧ Rcv(M5') | State' ≔ 2 ∧ M9' ≔ exp(M5',Dj) | ∧ M9' ≔ (IDi.Ri.M4) | ∧ Yj' ≔ h(Ej.Dj) | ∧ Rj' ≔ new() | ∧ Rij' ≔ xor(Ri,Rj) | ∧ SKj' ≔ h(IDi.IDj.Ri.Rj') | ∧ M6' ≔ h(SKj'.Rj'.IDj) | ∧ Snd(M6'.Rij') | ∧ secret(Ri,Rj'}, sec6, ASj,Ui}) | ∧ witness(Ui, ASj, aserver_user, Rj) | end role |
|