hashfunction hashed; usertype Message; protocol KeyExchange(Monitor,CloudServer) { role Monitor { fresh MonitorValue : Nonce; fresh Confirm: Message; var CloudServerValue : Nonce; send_1(Monitor,CloudServer,{Monitor,MonitorValue}pk(CloudServer)); recv_2(CloudServer,Monitor, {CloudServerValue,hashed(MonitorValue), CloudServer}pk(Monitor)); send_3(Monitor,CloudServer, hashed(CloudServerValue, Confirm)); claim_Monitor1(Monitor,Niagree); claim_Monitor2(Monitor,Nisynch); claim_Monitor3(Monitor, Secret, MonitorValue); claim_Monitor4(Monitor, Secret, CloudServerValue); } role CloudServer { var MonitorValue: Nonce; var Confirm: Message; fresh CloudServerValue: Nonce; recv_1(Monitor,CloudServer,{Monitor,MonitorValue}pk(CloudServer)); send_2(CloudServer,Monitor, {CloudServerValue,hashed(MonitorValue), CloudServer}pk(Monitor)); recv_3(Monitor,CloudServer, hashed(CloudServerValue, Confirm)); claim_CloudServer1(CloudServer,Niagree); claim_CloudServer2(CloudServer,Nisynch); claim_CloudServer3(CloudServer, Secret, MonitorValue); claim_CloudServer4(CloudServer, Secret, CloudServerValue); } }