role rserver (RC, Ui, ASj: agent, | SKey1 : symmetric_key, | SKey2 : symmetric_key, | H, MUL, SUB: hash_func, | Snd, Rcv: channel(dy) ) | played_by RC | def= | local State : nat, | IDj, IDi, Ej, P, Q, N, W, Dj, G, Yj: text, | Ai, Bi, Ci, Di, Ei, Fi, X, M1, M2, M3: 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(IDj'}_SKey1) | State' ≔ 1 Ej' ≔ new() | Dj' ≔new() | P' ≔new() | Q' ≔new() | N' ≔ MUL(P',Q') | W' ≔ MUL(SUB(P',1), SUB(Q',1)) | Yj' ≔ h(Ej'.Dj') | Snd(Ej'.Dj'}_SKey1) | secret(Dj'}, sec4, ASj,RC}) | secret(P',Q'}, sec5, RC}) | 2. State = 1 Rcv(IDi.Ai'}_SKey2) | State' ≔ 2 Bi' ≔ exp(G,MUL(X,IDi)) | Ci' ≔ exp(IDi,Ai) | Di' ≔ xor(Bi',Ci') | Ei' ≔h(Ai.Bi') | Fi' ≔IDi}_X | Snd(Di'.Ei'.Fi'.N}_SKey2) | 3. State = 2 Rcv(M1'.M2'.Fi.IDj) | State' ≔ 3 M3' ≔ xor(Yj,IDi) | Snd(Ej.M3') | end role |
|