role user (Ui, AS: agent, | SKuas: symmetric_key, | H, F: function, | SND, RCV: channel (dy)) | | played_by Ui def= | | local State: nat, | IDi, PWi, BIOi, RPWi, DPWi, T, Ai: text, | Hi, Vi, VVi, R, S, Xi, Yi, Wi: text, | CIDi, Zi, T1, T3, SK, Y2, Ys, Zs: text | const as_ui_y2, | sc1, sc2, sc3, sc4: protocol_id | | init State ≔ 0 | | transition | | (1) State = 0 ∧ RCV(start) =|> | State’ ≔ 1 ∧ T’ ≔ new() | ∧ RPWi’ ≔ H(PWi.Ai) | ∧ DPWi’ ≔ xor(RPWi’,T’) | ∧ secret(, sc1, Ui) | ∧ secret(IDi, sc2, ) | ∧ SND(SKuas) | | (2) State = 2 ∧ RCV(xor(H(IDi.xor(H(PWi.Ai),T’)),F(R.H(S.IDi))).xor((Yi’.H(Yi’.S)), | xor(H(PWi.Ai),T’)) _SKuas) =|> | State’ ≔ 4 ∧ secret(R, S, sc3, AS) | ∧ secret(F(R.H(S.IDi)), sc4, Ui, AS) | ∧ VVi’ ≔ xor(H(IDi.H(PWi.Ai)), F(R.H(S.IDi))) | ∧ Wi’ ≔ H(H(IDi.H(PWi.Ai)).F(R.H(S.IDi))) | ∧ Xi’ ≔ xor((Yi’.H(Yi’.S)),H(PWi.Ai)) | ∧ CIDi’ ≔ xor(IDi, H(Yi’.S)) | ∧ T1’ ≔ new() | ∧ Zi’ ≔ H(IDi.F(R.H(S.IDi)).Yi’.T1’) | ∧ SND(CIDi’.Yi’.Zi’.T1’) | | (3) State = 6 ∧ RCV(xor((Y2’.H(Y2’.S)),F(R.H(S.IDi))).H(SK.F(R.H(S.IDi)).T1’.T3’).T3’) =|> | State’ ≔ 8 ∧ SK’ ≔ H(IDi.F(R.H(S.IDi)).H(Y2’.S).T1’.T3’) | ∧ Xi’ ≔ xor((Y2’.H(Y2’.S)),H(PWi.Ai)) | ∧ request(Ui, AS, as_ui_y2, Y2’) | | end role |
|