import prelude;
public sending : Word;
public secret : Word;
public to : Word;
pattern Msg (a:Host)
= (text:Private, b:Host) [!begun (a sending secret text to b)];
tag msg (Msg(a)) : Auth (a:Host,b:Host);
fun lkupAuthKey (p:Any) : AuthKey(p);
client Sender
(a:Host, b:Host, sA:SignKey(a), pB:PublicKey(b))
at a is
{
establish Receiver at b is (socket : Socket);
new (text : Private);
begin! (a sending secret text to b);
output socket is (a, {| {| msg(text,b) |}sA |}pB);
}
server Receiver
(b:Host, pB:PrivateKey(b))
at b is (socket : Socket)
{
input socket is (a:Un, {| ctext:Tainted |}pB^-1);
let sA:AuthKey(a) = lkupAuthKey(a);
match ctext is {| msg(text:Private,b) |}sA^-1
[ !begun (a sending secret text to b) ];
end (a sending secret text to b);
}
|