packages feed

cpsa-4.4.1: coq/Examples/Yahalom.v

(** Protocol: yahalom (yahalom.scm:7:1) *)

Require Import Proc.
Import List.ListNotations.
Open Scope list_scope.
Open Scope string.

(** Role: init (yahalom.scm:9:3) *)

Definition init: proc :=
  mkProc
  [(0, Chan); (1, Chan); (2, Name); (3, Name); (4, Skey)]
  [
   (* Send (yahalom.scm:13:6) *)
   Bind (5, Text) (Frsh_);
   Bind (6, Mesg) (Pair_ 2 5);
   Send 0 6;
   (* Recv (yahalom.scm:14:6) *)
   Bind (7, Mesg) (Recv_ 1);
   Bind (8, Mesg) (Frst_ 7);
   Bind (9, Mesg) (Scnd_ 7);
   Bind (10, Mesg) (Decr_ 8 4);
   Bind (11, Name) (Frst_ 10);
   Bind (12, Mesg) (Scnd_ 10);
   Same 11 3;
   Bind (13, Skey) (Frst_ 12);
   Bind (14, Mesg) (Scnd_ 12);
   Bind (15, Text) (Frst_ 14);
   Bind (16, Text) (Scnd_ 14);
   Same 15 5;
   (* Send (yahalom.scm:15:6) *)
   Bind (17, Mesg) (Encr_ 16 13);
   Bind (18, Mesg) (Pair_ 9 17);
   Send 0 18;
   Return [13]
  ].

(** Role: resp (yahalom.scm:23:3) *)

Definition resp: proc :=
  mkProc
  [(0, Chan); (1, Chan); (2, Name); (3, Skey)]
  [
   (* Recv (yahalom.scm:26:6) *)
   Bind (4, Mesg) (Recv_ 0);
   Bind (5, Name) (Frst_ 4);
   Bind (6, Text) (Scnd_ 4);
   (* Send (yahalom.scm:27:6) *)
   Bind (7, Text) (Frsh_);
   Bind (8, Mesg) (Pair_ 6 7);
   Bind (9, Mesg) (Pair_ 5 8);
   Bind (10, Mesg) (Encr_ 9 3);
   Bind (11, Mesg) (Pair_ 2 10);
   Send 1 11;
   (* Recv (yahalom.scm:28:6) *)
   Bind (12, Mesg) (Recv_ 0);
   Bind (13, Mesg) (Frst_ 12);
   Bind (14, Mesg) (Scnd_ 12);
   Bind (15, Mesg) (Decr_ 13 3);
   Bind (16, Name) (Frst_ 15);
   Bind (17, Skey) (Scnd_ 15);
   Same 16 5;
   Bind (18, Text) (Decr_ 14 17);
   Same 18 7;
   Return [5; 17]
  ].

(** Role: serv-init (yahalom.scm:36:3) *)

Definition serv_init: proc :=
  mkProc
  [(0, Chan); (1, Name); (2, Skey)]
  [
   (* Recv (yahalom.scm:39:6) *)
   Bind (3, Mesg) (Recv_ 0);
   Bind (4, Name) (Frst_ 3);
   Bind (5, Mesg) (Scnd_ 3);
   Same 4 1;
   Bind (6, Mesg) (Decr_ 5 2);
   Bind (7, Name) (Frst_ 6);
   Bind (8, Mesg) (Scnd_ 6);
   Bind (9, Text) (Frst_ 8);
   Bind (10, Text) (Scnd_ 8);
   Return [7; 9; 10]
  ].

(** Role: serv-complete (yahalom.scm:45:3) *)

Definition serv_complete: proc :=
  mkProc
  [(0, Chan); (1, Name); (2, Name); (3, Skey); (4, Skey); (5, Text); (6, Text)]
  [
   (* Send (yahalom.scm:48:6) *)
   Bind (7, Skey) (Frsh_);
   Bind (8, Mesg) (Pair_ 5 6);
   Bind (9, Mesg) (Pair_ 7 8);
   Bind (10, Mesg) (Pair_ 2 9);
   Bind (11, Mesg) (Encr_ 10 3);
   Bind (12, Mesg) (Pair_ 1 7);
   Bind (13, Mesg) (Encr_ 12 4);
   Bind (14, Mesg) (Pair_ 11 13);
   Send 0 14;
   Return [7]
  ].