Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 47.59 KB | None | 0 0
  1. Require Import Notations Logic Datatypes PeanoNat String.
  2. Local Open Scope nat_scope.
  3. Inductive constant : Type :=
  4. | nil
  5. | value (s: string)
  6. | equation_c (base: constant) (exp: constant)
  7. | mult_c (c1: constant) (c2: constant)
  8. | ENC_c (key: constant) (message: constant)
  9. | AEAD_ENC_c (key: constant) (message: constant) (ad: constant)
  10. | PKE_ENC_c (G_key: constant) (message: constant)
  11. | CONCAT2_c (a: constant) (b: constant)
  12. | CONCAT3_c (a: constant) (b: constant) (c: constant)
  13. | CONCAT4_c (a: constant) (b: constant) (c: constant) (d: constant)
  14. | CONCAT5_c (a: constant) (b: constant) (c: constant) (d: constant) (e: constant)
  15. | HASH1_c (x: constant)
  16. | HASH2_c (x1: constant) (x2: constant)
  17. | HASH3_c (x1: constant) (x2: constant) (x3: constant)
  18. | HASH4_c (x1: constant) (x2: constant) (x3: constant) (x4: constant)
  19. | HASH5_c (x1: constant) (x2: constant) (x3: constant) (x4: constant) (x5: constant)
  20. | MAC_c (key: constant) (message: constant)
  21. | HKDF1_c (salt: constant) (ikm: constant) (info: constant)
  22. | HKDF2_c (salt: constant) (ikm: constant) (info: constant)
  23. | HKDF3_c (salt: constant) (ikm: constant) (info: constant)
  24. | HKDF4_c (salt: constant) (ikm: constant) (info: constant)
  25. | HKDF5_c (salt: constant) (ikm: constant) (info: constant)
  26. | PW_HASH_c (x: constant)
  27. | SIGN_c (k: constant) (m: constant)
  28. | RINGSIGN_c (key_a: constant) (G_key_b: constant) (G_key_c: constant) (message: constant)
  29. | SHAMIR_SPLIT1_c (k: constant)
  30. | SHAMIR_SPLIT2_c (k: constant)
  31. | SHAMIR_SPLIT3_c (k: constant)
  32. | SHAMIR_JOIN_c (sa: constant) (sb: constant)
  33. | INVALID (s: string)
  34. | VALID.
  35. Definition G := value "G".
  36. Notation "x && y" := (andb x y).
  37. Fixpoint equal_consts(c1 c2: constant) : bool :=
  38. match c1, c2 with
  39. | nil, nil => true
  40. | value s1, value s2 => eqb s1 s2
  41. | equation_c base1 exp1, equation_c base2 exp2 => andb (equal_consts base1 base2) (equal_consts exp1 exp2)
  42. | mult_c a b, mult_c c d => orb (andb (equal_consts a c) (equal_consts b d)) (andb (equal_consts a d) (equal_consts b c))
  43. | ENC_c k1 m1, ENC_c k2 m2 => andb (equal_consts k1 k2) (equal_consts m1 m2)
  44. | AEAD_ENC_c k1 m1 ad1, AEAD_ENC_c k2 m2 ad2 => andb (andb (equal_consts k1 k2) (equal_consts m1 m2)) (equal_consts ad1 ad2)
  45. | PKE_ENC_c k1 m1, PKE_ENC_c k2 m2 => andb (equal_consts k1 k2) (equal_consts m1 m2)
  46. | CONCAT2_c a1 b1, CONCAT2_c a2 b2 => andb (equal_consts a1 a2) (equal_consts b1 b2)
  47. | CONCAT3_c a1 b1 c1, CONCAT3_c a2 b2 c2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (equal_consts c1 c2))
  48. | CONCAT4_c a1 b1 c1 d1, CONCAT4_c a2 b2 c2 d2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (andb(equal_consts c1 c2) (equal_consts d1 d2)))
  49. | CONCAT5_c a1 b1 c1 d1 e1, CONCAT5_c a2 b2 c2 d2 e2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (andb (equal_consts c1 c2) (andb (equal_consts d1 d2) (equal_consts e1 e2))))
  50. | HASH1_c a, HASH1_c b => equal_consts a b
  51. | HASH2_c a1 b1, HASH2_c a2 b2 => andb (equal_consts a1 a2) (equal_consts b1 b2)
  52. | HASH3_c a1 b1 c1, HASH3_c a2 b2 c2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (equal_consts c1 c2))
  53. | HASH4_c a1 b1 c1 d1, HASH4_c a2 b2 c2 d2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (andb(equal_consts c1 c2) (equal_consts d1 d2)))
  54. | HASH5_c a1 b1 c1 d1 e1, HASH5_c a2 b2 c2 d2 e2 => andb (equal_consts a1 a2) (andb (equal_consts b1 b2) (andb (equal_consts c1 c2) (andb (equal_consts d1 d2) (equal_consts e1 e2))))
  55. | MAC_c k1 m1, MAC_c k2 m2 => andb (equal_consts k1 k2) (equal_consts m1 m2)
  56. | PW_HASH_c a, PW_HASH_c b => equal_consts a b
  57. | SIGN_c k1 m1, SIGN_c k2 m2 => andb (equal_consts k1 k2) (equal_consts m1 m2)
  58. | RINGSIGN_c ka1 gkb1 gkc1 m1, RINGSIGN_c ka2 gkb2 gkc2 m2 => andb (andb (equal_consts ka1 ka2) (equal_consts m1 m2)) (orb (andb (equal_consts gkb1 gkb2) (equal_consts gkc1 gkc2)) (andb (equal_consts gkb1 gkc2) (equal_consts gkc1 gkb2)))
  59. | SHAMIR_SPLIT1_c ka, SHAMIR_SPLIT1_c kb => equal_consts ka kb
  60. | SHAMIR_SPLIT2_c ka, SHAMIR_SPLIT2_c kb => equal_consts ka kb
  61. | SHAMIR_SPLIT3_c ka, SHAMIR_SPLIT3_c kb => equal_consts ka kb
  62. | SHAMIR_JOIN_c sa1 sb1, SHAMIR_JOIN_c sa2 sb2 => orb (andb (equal_consts sa1 sa2)(equal_consts sb1 sb2)) (andb (equal_consts sa1 sb2) (equal_consts sb1 sa2))
  63. | HKDF1_c salt1 ikm1 info1, HKDF1_c salt2 ikm2 info2 => andb (equal_consts salt1 salt2) (andb (equal_consts ikm1 ikm2) (equal_consts info1 info2))
  64. | HKDF2_c salt1 ikm1 info1, HKDF2_c salt2 ikm2 info2 => andb (equal_consts salt1 salt2) (andb (equal_consts ikm1 ikm2) (equal_consts info1 info2))
  65. | HKDF3_c salt1 ikm1 info1, HKDF3_c salt2 ikm2 info2 => andb (equal_consts salt1 salt2) (andb (equal_consts ikm1 ikm2) (equal_consts info1 info2))
  66. | HKDF4_c salt1 ikm1 info1, HKDF4_c salt2 ikm2 info2 => andb (equal_consts salt1 salt2) (andb (equal_consts ikm1 ikm2) (equal_consts info1 info2))
  67. | HKDF5_c salt1 ikm1 info1, HKDF5_c salt2 ikm2 info2 => andb (equal_consts salt1 salt2) (andb (equal_consts ikm1 ikm2) (equal_consts info1 info2))
  68. | _, _ => false
  69. end.
  70.  
  71. Fixpoint multiply(c1 c2: constant) : constant :=
  72. match c1, c2 with
  73. | _, nil => c1
  74. | nil, _ => c2
  75. | _, _ => mult_c c1 c2
  76. end.
  77.  
  78. Notation "c1 * c2" := (multiply c1 c2) (at level 40, left associativity) : nat_scope.
  79. (* ASSUMPTION: COMMUTATIVTY IN DH MULT*)
  80. Theorem mult_associativity: forall b c: constant, b*c = c*b.
  81. Admitted.
  82.  
  83. Fixpoint public_key(secret: constant) : constant := equation_c G secret.
  84.  
  85. Notation " G^( c )" := (public_key c) (at level 30, right associativity).
  86. Notation "x =? y" := (equal_consts x y) (at level 70) : nat_scope.
  87.  
  88.  
  89. Theorem pub_key: forall x: constant, public_key x = equation_c G x.
  90. Proof.
  91. intros x. destruct x eqn:E.
  92. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  93. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  94. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  95. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  96. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  97. reflexivity. reflexivity. reflexivity. reflexivity. reflexivity.
  98. reflexivity.
  99. Qed.
  100.  
  101. (* a private key always has the same public key *)
  102. Theorem pub_key_eq: forall x y: constant, x = y -> public_key x = public_key y.
  103. Proof.
  104. intros x y H.
  105. rewrite <- H.
  106. reflexivity.
  107. Qed.
  108.  
  109. Fixpoint DH(c1 c2: constant): constant :=
  110. match c1, c2 with
  111. | equation_c base1 exp1, equation_c base2 exp2 => equation_c G (exp1 * exp2)
  112. | equation_c base exp, _ => equation_c G (exp * c2)
  113. | _, equation_c base exp => equation_c G (exp * c1)
  114. | _, _ => equation_c G (c1 * c2)
  115. end.
  116.  
  117. (* WIP Equations *)
  118. (* Theorem dh_eq: forall x y, (DH (public_key x) y) = equation_c G (x*y).
  119. Proof.
  120. intros x y.
  121. destruct x eqn:Ex.
  122. destruct y eqn:Ey.
  123. reflexivity. reflexivity. simpl. reflexivity. *)
  124. (* Theorem dh_eq: forall x y, (DH (public_key x) y) = (DH (public_key y) x). *)
  125. (*theorem gxy = gyx*)
  126.  
  127. (* Encryption Primitives *)
  128. Fixpoint ENC(key plaintext: constant): constant := ENC_c key plaintext.
  129.  
  130. Fixpoint DEC(key ciphertext: constant): constant :=
  131. match ciphertext with
  132. | ENC_c k m => match equal_consts k key with
  133. | true => m
  134. | false => ENC_c k m
  135. end
  136. | _ => ciphertext
  137. end.
  138.  
  139. (*ASSUMPTION*)
  140. Theorem enc_dec: forall k m: constant, DEC k (ENC k m) = m.
  141. Admitted.
  142.  
  143. Theorem enc_dec_2: forall k m c: constant, c = ENC k m -> m = DEC k c.
  144. Proof.
  145. intros k m c H.
  146. rewrite -> H.
  147. rewrite -> enc_dec.
  148. reflexivity.
  149. Qed.
  150.  
  151. Fixpoint AEAD_ENC(key plaintext ad: constant): constant := AEAD_ENC_c key plaintext ad.
  152.  
  153. Fixpoint AEAD_DEC(key ciphertext ad: constant) : constant :=
  154. match ciphertext with
  155. | AEAD_ENC_c k m ad' => match equal_consts ad ad' with
  156. | true => match equal_consts key k with
  157. | true => m
  158. | false => ciphertext
  159. end
  160. | false => INVALID "AEAD_DEC_fail_ad_mismatch"
  161. end
  162. | _ => ciphertext
  163. end.
  164.  
  165. Fixpoint PKE_ENC(gkey plaintext: constant) : constant := PKE_ENC_c gkey plaintext.
  166.  
  167. Fixpoint PKE_DEC(key ciphertext: constant) : constant :=
  168. match ciphertext with
  169. | PKE_ENC_c gkey plaintext => match equal_consts (public_key key) gkey with
  170. | true => plaintext
  171. | false => ciphertext
  172. end
  173. | _ => ciphertext
  174. end.
  175.  
  176. (* Hashing Primitives *)
  177. Fixpoint HASH1(a: constant) : constant := HASH1_c a.
  178. Fixpoint HASH2(a: constant) (b: constant) : constant := HASH2_c a b.
  179. Fixpoint HASH3(a: constant) (b: constant) (c: constant) : constant := HASH3_c a b c.
  180. Fixpoint HASH4(a: constant) (b: constant) (c: constant) (d: constant) : constant := HASH4_c a b c d.
  181. Fixpoint HASH5(a: constant) (b: constant) (c: constant) (d: constant) (e: constant) : constant := HASH5_c a b c d e.
  182. Fixpoint MAC(key message: constant) : constant := MAC_c key message.
  183. Fixpoint PW_HASH(a: constant) : constant := PW_HASH_c a.
  184. Fixpoint HKDF1 (salt ikm info: constant) := HKDF1_c salt ikm info.
  185. Fixpoint HKDF2 (salt ikm info: constant) := HKDF2_c salt ikm info.
  186. Fixpoint HKDF3 (salt ikm info: constant) := HKDF3_c salt ikm info.
  187. Fixpoint HKDF4 (salt ikm info: constant) := HKDF4_c salt ikm info.
  188. Fixpoint HKDF5 (salt ikm info: constant) := HKDF5_c salt ikm info.
  189.  
  190. (* Signature Primitives *)
  191. Fixpoint SIGN(key message: constant) : constant := SIGN_c key message.
  192.  
  193. Fixpoint SIGNVERIF(gkey message signature: constant) : constant :=
  194. match gkey, signature with
  195. | equation_c base exp, SIGN_c key m => match andb (equal_consts exp key) (equal_consts message m) with
  196. | true => message
  197. | false => INVALID "SIGNVERIF_fail"
  198. end
  199. | _, _ => signature
  200. end.
  201.  
  202. Fixpoint RINGSIGN(key_a gkey_b gkey_c message: constant) : constant := RINGSIGN_c key_a gkey_b gkey_c message.
  203.  
  204. Fixpoint RINGSIGNVERIF(ga gb gc m signature: constant): constant :=
  205. match signature with
  206. | RINGSIGN_c key_a b c message => match ga, gb, gc with
  207. | equation_c base_a exp_a, equation_c base_b exp_b, equation_c base_c exp_c => match orb (orb (equal_consts exp_a key_a) (equal_consts exp_b key_a)) (equal_consts exp_b key_a) with
  208. | true => m
  209. | false => INVALID "RINGSIGNVERIF_fail_unable_to_auth"
  210. end
  211. | _, _, _ => INVALID "RINGSIGNVERIF_fail_key_type_mismatch"
  212. end
  213. | _ => signature
  214. end.
  215.  
  216. (* Secret Sharing Primitives *)
  217. Fixpoint SHAMIR_SPLIT1 (k: constant) : constant := SHAMIR_SPLIT1_c k.
  218. Fixpoint SHAMIR_SPLIT2 (k: constant) : constant := SHAMIR_SPLIT2_c k.
  219. Fixpoint SHAMIR_SPLIT3 (k: constant) : constant := SHAMIR_SPLIT3_c k.
  220.  
  221. Fixpoint SHAMIR_JOIN (sa sb: constant) : constant :=
  222. match sa,sb with
  223. | SHAMIR_SPLIT1_c ka, SHAMIR_SPLIT2_c kb => match equal_consts ka kb with
  224. | true => ka
  225. | false => SHAMIR_JOIN_c sa sb
  226. end
  227. | SHAMIR_SPLIT1_c ka, SHAMIR_SPLIT3_c kb => match equal_consts ka kb with
  228. | true => ka
  229. | false => SHAMIR_JOIN_c sa sb
  230. end
  231. | SHAMIR_SPLIT2_c ka, SHAMIR_SPLIT1_c kb => match equal_consts ka kb with
  232. | true => ka
  233. | false => SHAMIR_JOIN_c sa sb
  234. end
  235. | SHAMIR_SPLIT2_c ka, SHAMIR_SPLIT3_c kb => match equal_consts ka kb with
  236. | true => ka
  237. | false => SHAMIR_JOIN_c sa sb
  238. end
  239. | SHAMIR_SPLIT3_c ka, SHAMIR_SPLIT1_c kb => match equal_consts ka kb with
  240. | true => ka
  241. | false => SHAMIR_JOIN_c sa sb
  242. end
  243. | SHAMIR_SPLIT3_c ka, SHAMIR_SPLIT2_c kb => match equal_consts ka kb with
  244. | true => ka
  245. | false => SHAMIR_JOIN_c sa sb
  246. end
  247. | _, _ => SHAMIR_JOIN_c sa sb
  248. end.
  249. (* Core Primitives *)
  250. Fixpoint ASSERT (c1 c2: constant) : constant :=
  251. match equal_consts c1 c2 with
  252. | true => VALID
  253. | false => INVALID "ASSERT_fail"
  254. end.
  255.  
  256. Fixpoint CONCAT2 (c1 c2: constant) : constant := CONCAT2_c c1 c2.
  257. Fixpoint CONCAT3 (c1 c2 c3: constant) : constant := CONCAT3_c c1 c2 c3.
  258. Fixpoint CONCAT4 (c1 c2 c3 c4: constant) : constant := CONCAT4_c c1 c2 c3 c4.
  259. Fixpoint CONCAT5 (c1 c2 c3 c4 c5: constant) : constant := CONCAT5_c c1 c2 c3 c4 c5.
  260.  
  261. Fixpoint SPLIT1 (c: constant) : constant :=
  262. match c with
  263. | CONCAT2_c c' _ => c'
  264. | CONCAT3_c c' _ _ => c'
  265. | CONCAT4_c c' _ _ _ => c'
  266. | CONCAT5_c c' _ _ _ _ => c'
  267. | _ => INVALID("Attempting to use SPLIT1 with an incompatible argument")
  268. end.
  269.  
  270. Fixpoint SPLIT2 (c: constant) : constant :=
  271. match c with
  272. | CONCAT2_c _ c' => c'
  273. | CONCAT3_c _ c' _ => c'
  274. | CONCAT4_c _ c' _ _ => c'
  275. | CONCAT5_c _ c' _ _ _ => c'
  276. | _ => INVALID("Attempting to use SPLIT2 with an incompatible argument")
  277. end.
  278.  
  279. Fixpoint SPLIT3 (c: constant) : constant :=
  280. match c with
  281. | CONCAT3_c _ _ c' => c'
  282. | CONCAT4_c _ _ c' _ => c'
  283. | CONCAT5_c _ _ c' _ _ => c'
  284. | _ => INVALID("Attempting to use SPLIT3 with an incompatible argument")
  285. end.
  286.  
  287. Fixpoint SPLIT4 (c: constant) : constant :=
  288. match c with
  289. | CONCAT4_c _ _ _ c' => c'
  290. | CONCAT5_c _ _ _ c' _ => c'
  291. | _ => INVALID("Attempting to use SPLIT4 with an incompatible argument")
  292. end.
  293.  
  294. Fixpoint SPLIT5 (c: constant) : constant :=
  295. match c with
  296. | CONCAT5_c _ _ _ _ c' => c'
  297. | _ => INVALID("Attempting to use SPLIT5 with an incompatible argument")
  298. end.
  299.  
  300. (*end of primitives*)
  301. Inductive qualifier : Type :=
  302. | public
  303. | private
  304. | password.
  305.  
  306. Inductive declaration : Type :=
  307. | assignment
  308. | knows
  309. | generates.
  310.  
  311. Inductive guard_state : Type :=
  312. | guarded
  313. | unguarded.
  314.  
  315. Inductive leak_state : Type :=
  316. | leaked
  317. | not_leaked.
  318.  
  319. Inductive constant_meta: Type :=
  320. | constant_meta_c (c: constant) (d: declaration) (q: qualifier) (created_by name: string) (l: leak_state)
  321. | constant_meta_invalid (code: string).
  322.  
  323. Fixpoint constant_meta_constructor (c: constant) (d: declaration) (q: qualifier) (created_by name: string) :=
  324. match eqb created_by "", eqb name "" with
  325. | true, true => constant_meta_invalid "constant_meta must have an non empty value for created_by and name."
  326. | true, false => constant_meta_invalid "constant_meta must have an non empty value for created_by."
  327. | false, true => constant_meta_invalid "constant_meta must have an non empty value for name."
  328. | false, false => constant_meta_c c d q created_by name not_leaked
  329. end.
  330.  
  331. Fixpoint get_name_constant_meta (c: constant_meta) : string :=
  332. match c with
  333. | constant_meta_invalid code => code
  334. | constant_meta_c _ _ _ _ name _ => name
  335. end.
  336.  
  337. Fixpoint equal_constant_meta (a b: constant_meta) : bool :=
  338. match a,b with
  339. | constant_meta_c c1 _ _ _ _ _, constant_meta_c c2 _ _ _ _ _ => equal_consts c1 c2
  340. | _, _ => false
  341. end.
  342.  
  343. Fixpoint leak_constant_meta (cm: constant_meta) : constant_meta :=
  344. match cm with
  345. | constant_meta_invalid code => constant_meta_invalid ("Attempting to leak invalid constant_meta; " ++ code)
  346. | constant_meta_c c d q created_by name _ => constant_meta_c c d q created_by name leaked
  347. end.
  348.  
  349. Inductive principal_knowledge: Type :=
  350. | principal_knowledge_empty
  351. | principal_knowledge_invalid (code: string)
  352. | principal_knowledge_c (c: constant_meta) (next: principal_knowledge).
  353.  
  354. Fixpoint principal_knowledge_constructor (cm: constant_meta) (next: principal_knowledge) : principal_knowledge :=
  355. match cm with
  356. | constant_meta_invalid code => principal_knowledge_invalid "Attempting to construct principal_knowledge using invalid constant_meta"
  357. | constant_meta_c _ _ _ _ _ _ => match next with
  358. | principal_knowledge_invalid code => principal_knowledge_invalid "Attempting to construct principal_knowledge using invalid provided next principal_knowledge"
  359. | _ => principal_knowledge_c cm next
  360. end
  361. end.
  362.  
  363. Fixpoint push_pk (pk: principal_knowledge) (cm: constant_meta) : principal_knowledge :=
  364. match pk with
  365. | principal_knowledge_invalid code => principal_knowledge_invalid ("Attempting to push constant_meta to invalid principal_knowledge; " ++ code)
  366. | _ => principal_knowledge_constructor cm pk
  367. end.
  368.  
  369. Fixpoint get_constant_meta_by_name_pk (pk: principal_knowledge) (name: string) : constant_meta :=
  370. match pk with
  371. | principal_knowledge_invalid code => constant_meta_invalid ("Attempting to get constant_meta from invalid principal_knowledge; " ++ code)
  372. | principal_knowledge_empty => constant_meta_invalid "Value not found"
  373. | principal_knowledge_c c next => match eqb name "" with
  374. | true => constant_meta_invalid "Attempting to get a constant_meta with an empty string as its name"
  375. | false => match eqb (get_name_constant_meta c) name with
  376. | true => c
  377. | false => get_constant_meta_by_name_pk next name
  378. end
  379. end
  380. end.
  381.  
  382. Fixpoint remove_constant_meta_pk (pk: principal_knowledge) (name: string) : principal_knowledge :=
  383. match pk with
  384. | principal_knowledge_empty => pk
  385. | principal_knowledge_invalid code => principal_knowledge_invalid ("Attempting to remove constant_meta from invalid principal_knowledge; " ++ code)
  386. | principal_knowledge_c cm next => match eqb name "" with
  387. | true => principal_knowledge_invalid "Attempting to remove a constant_meta with an empty string as its name"
  388. | false => match eqb name (get_name_constant_meta cm) with
  389. | true => next
  390. | false => principal_knowledge_constructor cm (remove_constant_meta_pk next name)
  391. end
  392. end
  393. end.
  394.  
  395. Fixpoint update_constant_meta_pk (pk: principal_knowledge) (cm: constant_meta): principal_knowledge :=
  396. match pk with
  397. | principal_knowledge_invalid code => principal_knowledge_invalid ("Attempting to update a constant_meta in an invalid principal_knowledge; " ++ code)
  398. | principal_knowledge_empty => principal_knowledge_invalid "constant_meta not found"
  399. | principal_knowledge_c _ _ => match cm with
  400. | constant_meta_invalid _ => principal_knowledge_invalid "Attempting to update a constant_meta using an invalid principal"
  401. | constant_meta_c _ _ _ _ _ _ => principal_knowledge_constructor cm (remove_constant_meta_pk pk (get_name_constant_meta cm))
  402. end
  403. end.
  404.  
  405. Fixpoint leak_constant_meta_pk (pk: principal_knowledge) (name: string) : principal_knowledge :=
  406. match pk with
  407. | principal_knowledge_invalid code => principal_knowledge_invalid ("Attempting to leak constant_meta in invalid principal_knowledge; " ++ code)
  408. | principal_knowledge_empty => principal_knowledge_invalid "Attempting to leak constant_meta in empty principal_knowledge"
  409. | principal_knowledge_c _ _ => update_constant_meta_pk pk (leak_constant_meta(get_constant_meta_by_name_pk pk name))
  410. end.
  411.  
  412. Inductive principal : Type :=
  413. | principal_invalid (code: string)
  414. | principal_c (name: string) (pk: principal_knowledge).
  415.  
  416. Fixpoint principal_constructor (name: string) (pk: principal_knowledge) : principal :=
  417. match eqb name "" with
  418. | true => principal_invalid "Attempt to construct a principal without a name."
  419. | false => principal_c name pk
  420. end.
  421.  
  422. Fixpoint teach_principal (p: principal) (cm: constant_meta) : principal :=
  423. match p with
  424. | principal_invalid _ => p
  425. | principal_c name knowledge => principal_constructor name (push_pk knowledge cm)
  426. end.
  427.  
  428. Fixpoint generate_value (p: principal) (s: string) : principal :=
  429. match eqb "" s with
  430. | true => principal_invalid "Generated value must have a non empty string as its name."
  431. | false => match p with
  432. | principal_invalid _ => p
  433. | principal_c name _ => teach_principal p (constant_meta_constructor (value s) generates private name s)
  434. end
  435. end.
  436.  
  437. Fixpoint know_value (p: principal) (s: string) (q: qualifier) : principal :=
  438. match eqb "" s with
  439. | true => principal_invalid "Value to be known must have a non empty string as its name."
  440. | false => match p with
  441. | principal_invalid _ => p
  442. | principal_c name _ => teach_principal p (constant_meta_constructor (value s) knows q name s)
  443. end
  444. end.
  445.  
  446. Fixpoint assign_value (p: principal) (c: constant) (s: string) : principal :=
  447. match eqb "" s with
  448. | true => principal_invalid "Assigned value must have a non empty string as its name."
  449. | false => match p with
  450. | principal_invalid code => p
  451. | principal_c name _ => teach_principal p (constant_meta_constructor c assignment private name s)
  452. end
  453. end.
  454.  
  455. Fixpoint get_name_principal (p: principal) : string :=
  456. match p with
  457. | principal_invalid code => code
  458. | principal_c name _ => name
  459. end.
  460.  
  461. Fixpoint get_constant_meta_by_name_principal (p: principal) (name: string) : constant_meta :=
  462. match eqb "" name with
  463. | true => constant_meta_invalid "Attempting to look for a value with an empty string as its name"
  464. | false => match p with
  465. | principal_invalid _ => constant_meta_invalid "Value not found."
  466. | principal_c _ k => get_constant_meta_by_name_pk k name
  467. end
  468. end.
  469.  
  470. Fixpoint leak_value (p: principal) (value_name: string) : principal :=
  471. match eqb "" value_name with
  472. | true => principal_invalid "Attepmting to leak a value with an invalid name."
  473. | false => match p with
  474. | principal_invalid code => principal_invalid ("Attempting to leak a value in an invalid principal; " ++ code)
  475. | principal_c principal_name pk => principal_constructor principal_name (leak_constant_meta_pk pk value_name)
  476. end
  477. end.
  478.  
  479. Fixpoint get (p: principal) (name: string) : constant :=
  480. match (get_constant_meta_by_name_principal p name) with
  481. | constant_meta_invalid code => INVALID code
  482. | constant_meta_c c' _ _ _ _ _ => c'
  483. end.
  484.  
  485. Inductive principal_list : Type :=
  486. | principal_list_invalid (code: string)
  487. | principal_list_empty
  488. | principal_list_c (p: principal) (next: principal_list).
  489.  
  490. Fixpoint principal_list_constructor (p: principal) (next: principal_list) : principal_list :=
  491. match p with
  492. | principal_invalid code => principal_list_invalid ("Cannot construct principal_list using invalid principal; " ++ code)
  493. | principal_c _ _ => match next with
  494. | principal_list_invalid code => principal_list_invalid ("Cannot construct principal_list using invalid next principal_list; " ++ code)
  495. | _ => principal_list_c p next
  496. end
  497. end.
  498.  
  499. Fixpoint add_principal (list: principal_list) (p: principal) : principal_list :=
  500. match list with
  501. | principal_list_invalid code => principal_list_invalid ("Cannot add principal to invalid list; " ++ code)
  502. | principal_list_empty => principal_list_constructor p list
  503. | principal_list_c _ next => principal_list_constructor p list
  504. end.
  505.  
  506. Fixpoint remove_principal (list: principal_list) (name: string) : principal_list :=
  507. match list with
  508. | principal_list_invalid code => principal_list_invalid ("Attempting to remove a principal from an invalid principal_list; " ++ code)
  509. | principal_list_empty => principal_list_invalid "Principal not found"
  510. | principal_list_c p next => match eqb name "" with
  511. | true => principal_list_invalid "Attempting to remove a principal with an empty string as its name"
  512. | false => match eqb name (get_name_principal p) with
  513. | true => next
  514. | false => principal_list_constructor p (remove_principal next name)
  515. end
  516. end
  517. end.
  518. Fixpoint update_principal (list: principal_list) (p: principal): principal_list :=
  519. match list with
  520. | principal_list_invalid code => principal_list_invalid ("Attempting to update a principal in an invalid principal_list; " ++ code)
  521. | principal_list_empty => principal_list_invalid "Principal not found"
  522. | principal_list_c _ _ => match p with
  523. | principal_invalid _ => principal_list_invalid "Attempting to update a principal_list using an invalid principal"
  524. | principal_c _ _ => principal_list_constructor p (remove_principal list (get_name_principal p))
  525. end
  526. end.
  527.  
  528. Fixpoint get_principal_by_name_principal_list (list: principal_list) (name: string) : principal :=
  529. match list with
  530. | principal_list_invalid code => principal_invalid ("Attempting to get a principal from an invalid principal_list; " ++ code)
  531. | principal_list_empty => principal_invalid "Principal not found"
  532. | principal_list_c p list' => match eqb name "" with
  533. | true => principal_invalid "The provided name for the principal cannot be empty"
  534. | false => match eqb (get_name_principal p) name with
  535. | true => p
  536. | false => get_principal_by_name_principal_list list' name
  537. end
  538. end
  539. end.
  540.  
  541. Fixpoint teach_principal_principal_list (list: principal_list) (principal_name: string) (cm: constant_meta) : principal_list :=
  542. match cm with
  543. | constant_meta_invalid code => principal_list_invalid ("Attempting to teach an invalid constant_meta to a principal; " ++ code)
  544. | constant_meta_c _ _ _ _ _ _ => match eqb principal_name "" with
  545. | true => principal_list_invalid "The provided name for the principal cannot be empty"
  546. | false => match list with
  547. | principal_list_invalid code => principal_list_invalid ("Attempting to teach a principal in an invalid principal_list; " ++ code)
  548. | principal_list_empty => add_principal list (teach_principal (principal_constructor principal_name principal_knowledge_empty) cm)
  549. | principal_list_c p list' => update_principal list (teach_principal (get_principal_by_name_principal_list list principal_name) cm)
  550. end
  551. end
  552. end.
  553.  
  554. Inductive message : Type :=
  555. | message_c (from to value_name: string) (g: guard_state)
  556. | message_invalid (code: string).
  557.  
  558. Fixpoint message_constructor (from to value_name: string) (g: guard_state) :=
  559. match eqb "" from, eqb "" to, eqb "" value_name with
  560. | true, _, _ => message_invalid "The value of from cannot be empty"
  561. | _, true, _ => message_invalid "The value of to cannot be empty"
  562. | _, _, true => message_invalid "The value of value_name cannot be empty"
  563. | false, false, false => message_c from to value_name g
  564. end.
  565.  
  566. Inductive message_list : Type :=
  567. | message_list_invalid (code: string)
  568. | message_list_empty
  569. | message_list_c (m: message) (next: message_list).
  570.  
  571. Fixpoint message_list_constructor (m: message) : message_list :=
  572. match m with
  573. | message_invalid _ => message_list_invalid "Attempting to construct message_list using an invalid message"
  574. | message_c _ _ _ _ => message_list_c m message_list_empty
  575. end.
  576.  
  577. Fixpoint add_message_to_list (list: message_list) (m: message) : message_list :=
  578. match m with
  579. | message_invalid _ => message_list_invalid "Attempting to add invalid message to list"
  580. | message_c _ _ _ _ => match list with
  581. | message_list_invalid _ => message_list_invalid "Attempting to add message to invalid message_list"
  582. | message_list_empty => message_list_constructor m
  583. | message_list_c _ next => add_message_to_list next m
  584. end
  585. end.
  586.  
  587. Inductive knowledgemap : Type :=
  588. | knowledgemap_invalid (code: string)
  589. | knowledgemap_c (list: principal_list) (messages: message_list).
  590.  
  591. Fixpoint knowledgemap_constructor (principal_name: string) : knowledgemap :=
  592. match eqb principal_name "" with
  593. | true => knowledgemap_invalid "Attempting to construct knowledge map with empty principal name"
  594. | false => knowledgemap_c (principal_list_constructor (principal_constructor principal_name principal_knowledge_empty) principal_list_empty) message_list_empty
  595. end.
  596.  
  597. Fixpoint add_principal_knowledgemap (k: knowledgemap) (name: string) : knowledgemap :=
  598. match k with
  599. | knowledgemap_invalid code => knowledgemap_invalid ("Attempting to add principal to invalid knowledgemap; " ++ code)
  600. | knowledgemap_c list m => knowledgemap_c (add_principal list (principal_constructor name principal_knowledge_empty)) m
  601. end.
  602.  
  603. Fixpoint get_principal_knowledgemap (k: knowledgemap) (name: string) : principal :=
  604. match k with
  605. | knowledgemap_invalid code => principal_invalid ("Attempting to get principal from invalid knowledgemap; " ++ code)
  606. | knowledgemap_c list _ => get_principal_by_name_principal_list list name
  607. end.
  608.  
  609. Fixpoint update_principal_knowledgemap (k: knowledgemap) (p: principal) : knowledgemap :=
  610. match k with
  611. | knowledgemap_invalid code => knowledgemap_invalid ("Attempting to update principal in invalid knowledgemap; " ++ code)
  612. | knowledgemap_c list m => knowledgemap_c (update_principal list p) m
  613. end.
  614.  
  615. Fixpoint add_message_knowledgemap (k: knowledgemap) (m: message) : knowledgemap :=
  616. match k with
  617. | knowledgemap_invalid code => knowledgemap_invalid ("Attempting to add message to invalid knowledgemap; " ++ code)
  618. | knowledgemap_c list messages => knowledgemap_c list (add_message_to_list messages m)
  619. end.
  620.  
  621. Fixpoint send_message (s: knowledgemap): knowledgemap :=
  622. match s with
  623. | knowledgemap_invalid _ => knowledgemap_invalid "Attempting to send a message using an invalid knowledgemap"
  624. | knowledgemap_c list messages => match messages with
  625. | message_list_invalid _ => knowledgemap_invalid "Invalid message list"
  626. | message_list_empty => s
  627. | message_list_c m next => match m with
  628. | message_invalid _ => knowledgemap_invalid "Attempting to send an invalid message"
  629. | message_c from to value_name g => match get_principal_by_name_principal_list list from with
  630. | principal_invalid code => knowledgemap_invalid ("The sender provided is not valid; " ++ code)
  631. | principal_c _ sender_pk => match get_constant_meta_by_name_pk sender_pk value_name with
  632. | constant_meta_invalid code => knowledgemap_invalid ("The sender does now list know the value being sent; " ++ code)
  633. | constant_meta_c _ _ _ _ _ _ => match get_principal_by_name_principal_list list to with
  634. | principal_invalid code => knowledgemap_invalid ("The recipient provided is not valid; " ++ code)
  635. | principal_c _ recipient_pk => knowledgemap_c (teach_principal_principal_list list to (get_constant_meta_by_name_pk sender_pk value_name)) next
  636. end
  637. end
  638. end
  639. end
  640. end
  641. end.
  642.  
  643.  
  644. (* Protocol: signal.vp *)
  645.  
  646. Definition kmap_0 := knowledgemap_constructor "Alice".
  647. Definition kmap_1 := add_principal_knowledgemap kmap_0 "Alice".
  648. Definition kmap_2 := add_principal_knowledgemap kmap_1 "Bob".
  649. Definition principal_alice_0 := get_principal_knowledgemap kmap_2 "Alice".
  650. Definition principal_alice_1 := know_value principal_alice_0 "c0" public.
  651. Definition principal_alice_2 := know_value principal_alice_1 "c1" public.
  652. Definition principal_alice_3 := know_value principal_alice_2 "c2" public.
  653. Definition principal_alice_4 := know_value principal_alice_3 "c3" public.
  654. Definition principal_alice_5 := know_value principal_alice_4 "c4" public.
  655. Definition principal_alice_6 := know_value principal_alice_5 "alongterm" private.
  656. Definition principal_alice_7 := assign_value principal_alice_6 (public_key (get principal_alice_6 "alongterm")) "galongterm".
  657. Definition kmap_3 := update_principal_knowledgemap kmap_2 principal_alice_7.
  658. Definition principal_bob_0 := get_principal_knowledgemap kmap_3 "Bob".
  659. Definition principal_bob_1 := know_value principal_bob_0 "c0" public.
  660. Definition principal_bob_2 := know_value principal_bob_1 "c1" public.
  661. Definition principal_bob_3 := know_value principal_bob_2 "c2" public.
  662. Definition principal_bob_4 := know_value principal_bob_3 "c3" public.
  663. Definition principal_bob_5 := know_value principal_bob_4 "c4" public.
  664. Definition principal_bob_6 := know_value principal_bob_5 "blongterm" private.
  665. Definition principal_bob_7 := know_value principal_bob_6 "bs" private.
  666. Definition principal_bob_8 := generate_value principal_bob_7 "bo".
  667. Definition principal_bob_9 := assign_value principal_bob_8 (public_key (get principal_bob_8 "blongterm")) "gblongterm".
  668. Definition principal_bob_10 := assign_value principal_bob_9 (public_key (get principal_bob_9 "bs")) "gbs".
  669. Definition principal_bob_11 := assign_value principal_bob_10 (public_key (get principal_bob_10 "bo")) "gbo".
  670. Definition principal_bob_12 := assign_value principal_bob_11 (SIGN (get principal_bob_11 "blongterm") (get principal_bob_11 "gbs")) "gbssig".
  671. Definition kmap_4 := update_principal_knowledgemap kmap_3 principal_bob_12.
  672. Definition kmap_5 := add_message_knowledgemap kmap_4 (message_constructor "Bob" "Alice" "gblongterm" guarded).
  673. Definition kmap_6 := send_message kmap_5.
  674. Definition kmap_7 := add_message_knowledgemap kmap_6 (message_constructor "Bob" "Alice" "gbssig" unguarded).
  675. Definition kmap_8 := send_message kmap_7.
  676. Definition kmap_9 := add_message_knowledgemap kmap_8 (message_constructor "Bob" "Alice" "gbs" unguarded).
  677. Definition kmap_10 := send_message kmap_9.
  678. Definition kmap_11 := add_message_knowledgemap kmap_10 (message_constructor "Bob" "Alice" "gbo" unguarded).
  679. Definition kmap_12 := send_message kmap_11.
  680. Definition principal_alice_8 := get_principal_knowledgemap kmap_12 "Alice".
  681. Definition principal_alice_9 := generate_value principal_alice_8 "ae1".
  682. Definition principal_alice_10 := assign_value principal_alice_9 (public_key (get principal_alice_9 "ae1")) "gae1".
  683. Definition principal_alice_11 := assign_value principal_alice_10 (DH (get principal_alice_10 "gbs")(get principal_alice_10 "alongterm")) "unnamed_0".
  684. Definition principal_alice_12 := assign_value principal_alice_11 (DH (get principal_alice_11 "gblongterm")(get principal_alice_11 "ae1")) "unnamed_1".
  685. Definition principal_alice_13 := assign_value principal_alice_12 (DH (get principal_alice_12 "gbs")(get principal_alice_12 "ae1")) "unnamed_2".
  686. Definition principal_alice_14 := assign_value principal_alice_13 (DH (get principal_alice_13 "gbo")(get principal_alice_13 "ae1")) "unnamed_3".
  687. Definition principal_alice_15 := assign_value principal_alice_14 (HASH5 (get principal_alice_10 "c0") (get principal_alice_11 "unnamed_0") (get principal_alice_12 "unnamed_1") (get principal_alice_13 "unnamed_2") (get principal_alice_14 "unnamed_3")) "amaster".
  688. Definition principal_alice_16 := assign_value principal_alice_15 (HKDF1 (get principal_alice_15 "amaster") (get principal_alice_15 "c1") (get principal_alice_15 "c2")) "arkba1".
  689. Definition principal_alice_17 := assign_value principal_alice_16 (HKDF2 (get principal_alice_16 "amaster") (get principal_alice_16 "c1") (get principal_alice_16 "c2")) "ackba1".
  690. Definition kmap_13 := update_principal_knowledgemap kmap_12 principal_alice_17.
  691. Definition principal_alice_18 := get_principal_knowledgemap kmap_13 "Alice".
  692. Definition principal_alice_19 := generate_value principal_alice_18 "m1".
  693. Definition principal_alice_20 := generate_value principal_alice_19 "ae2".
  694. Definition principal_alice_21 := assign_value principal_alice_20 (public_key (get principal_alice_20 "ae2")) "gae2".
  695. Definition principal_alice_22 := assign_value principal_alice_21 (SIGNVERIF (get principal_alice_21 "gblongterm") (get principal_alice_21 "gbs") (get principal_alice_21 "gbssig")) "unnamed_0".
  696. Definition principal_alice_23 := assign_value principal_alice_22 (DH (get principal_alice_22 "gbs")(get principal_alice_22 "ae2")) "akshared1".
  697. Definition principal_alice_24 := assign_value principal_alice_23 (HKDF1 (get principal_alice_23 "akshared1") (get principal_alice_23 "arkba1") (get principal_alice_23 "c2")) "arkab1".
  698. Definition principal_alice_25 := assign_value principal_alice_24 (HKDF2 (get principal_alice_24 "akshared1") (get principal_alice_24 "arkba1") (get principal_alice_24 "c2")) "ackab1".
  699. Definition principal_alice_26 := assign_value principal_alice_25 (MAC (get principal_alice_25 "ackab1") (get principal_alice_25 "c3")) "unnamed_4".
  700. Definition principal_alice_27 := assign_value principal_alice_26 (HKDF1 (get principal_alice_26 "unnamed_4") (get principal_alice_26 "c1") (get principal_alice_26 "c4")) "akenc1".
  701. Definition principal_alice_28 := assign_value principal_alice_27 (MAC (get principal_alice_27 "ackab1") (get principal_alice_27 "c3")) "unnamed_5".
  702. Definition principal_alice_29 := assign_value principal_alice_28 (HKDF2 (get principal_alice_28 "unnamed_5") (get principal_alice_28 "c1") (get principal_alice_28 "c4")) "akenc2".
  703. Definition principal_alice_30 := assign_value principal_alice_29 (HASH3 (get principal_alice_29 "galongterm") (get principal_alice_29 "gblongterm") (get principal_alice_29 "gae2")) "unnamed_6".
  704. Definition principal_alice_31 := assign_value principal_alice_30 (AEAD_ENC (get principal_alice_29 "akenc1") (get principal_alice_29 "m1") (get principal_alice_30 "unnamed_6")) "e1".
  705. Definition kmap_14 := update_principal_knowledgemap kmap_13 principal_alice_31.
  706. Definition kmap_15 := add_message_knowledgemap kmap_14 (message_constructor "Alice" "Bob" "galongterm" guarded).
  707. Definition kmap_16 := send_message kmap_15.
  708. Definition kmap_17 := add_message_knowledgemap kmap_16 (message_constructor "Alice" "Bob" "gae1" unguarded).
  709. Definition kmap_18 := send_message kmap_17.
  710. Definition kmap_19 := add_message_knowledgemap kmap_18 (message_constructor "Alice" "Bob" "gae2" unguarded).
  711. Definition kmap_20 := send_message kmap_19.
  712. Definition kmap_21 := add_message_knowledgemap kmap_20 (message_constructor "Alice" "Bob" "e1" unguarded).
  713. Definition kmap_22 := send_message kmap_21.
  714. Definition principal_bob_13 := get_principal_knowledgemap kmap_22 "Bob".
  715. Definition principal_bob_14 := assign_value principal_bob_13 (DH (get principal_bob_13 "galongterm")(get principal_bob_13 "bs")) "unnamed_7".
  716. Definition principal_bob_15 := assign_value principal_bob_14 (DH (get principal_bob_14 "gae1")(get principal_bob_14 "blongterm")) "unnamed_8".
  717. Definition principal_bob_16 := assign_value principal_bob_15 (DH (get principal_bob_15 "gae1")(get principal_bob_15 "bs")) "unnamed_9".
  718. Definition principal_bob_17 := assign_value principal_bob_16 (DH (get principal_bob_16 "gae1")(get principal_bob_16 "bo")) "unnamed_10".
  719. Definition principal_bob_18 := assign_value principal_bob_17 (HASH5 (get principal_bob_13 "c0") (get principal_bob_14 "unnamed_7") (get principal_bob_15 "unnamed_8") (get principal_bob_16 "unnamed_9") (get principal_bob_17 "unnamed_10")) "bmaster".
  720. Definition principal_bob_19 := assign_value principal_bob_18 (HKDF1 (get principal_bob_18 "bmaster") (get principal_bob_18 "c1") (get principal_bob_18 "c2")) "brkba1".
  721. Definition principal_bob_20 := assign_value principal_bob_19 (HKDF2 (get principal_bob_19 "bmaster") (get principal_bob_19 "c1") (get principal_bob_19 "c2")) "bckba1".
  722. Definition kmap_23 := update_principal_knowledgemap kmap_22 principal_bob_20.
  723. Definition principal_bob_21 := get_principal_knowledgemap kmap_23 "Bob".
  724. Definition principal_bob_22 := assign_value principal_bob_21 (DH (get principal_bob_21 "gae2")(get principal_bob_21 "bs")) "bkshared1".
  725. Definition principal_bob_23 := assign_value principal_bob_22 (HKDF1 (get principal_bob_22 "bkshared1") (get principal_bob_22 "brkba1") (get principal_bob_22 "c2")) "brkab1".
  726. Definition principal_bob_24 := assign_value principal_bob_23 (HKDF2 (get principal_bob_23 "bkshared1") (get principal_bob_23 "brkba1") (get principal_bob_23 "c2")) "bckab1".
  727. Definition principal_bob_25 := assign_value principal_bob_24 (MAC (get principal_bob_24 "bckab1") (get principal_bob_24 "c3")) "unnamed_11".
  728. Definition principal_bob_26 := assign_value principal_bob_25 (HKDF1 (get principal_bob_25 "unnamed_11") (get principal_bob_25 "c1") (get principal_bob_25 "c4")) "bkenc1".
  729. Definition principal_bob_27 := assign_value principal_bob_26 (MAC (get principal_bob_26 "bckab1") (get principal_bob_26 "c3")) "unnamed_12".
  730. Definition principal_bob_28 := assign_value principal_bob_27 (HKDF2 (get principal_bob_27 "unnamed_12") (get principal_bob_27 "c1") (get principal_bob_27 "c4")) "bkenc2".
  731. Definition principal_bob_29 := assign_value principal_bob_28 (HASH3 (get principal_bob_28 "galongterm") (get principal_bob_28 "gblongterm") (get principal_bob_28 "gae2")) "unnamed_13".
  732. Definition principal_bob_30 := assign_value principal_bob_29 (AEAD_DEC (get principal_bob_28 "bkenc1") (get principal_bob_28 "e1") (get principal_bob_29 "unnamed_13")) "m1_d".
  733. Definition kmap_24 := update_principal_knowledgemap kmap_23 principal_bob_30.
  734. Definition principal_bob_31 := get_principal_knowledgemap kmap_24 "Bob".
  735. Definition principal_bob_32 := generate_value principal_bob_31 "m2".
  736. Definition principal_bob_33 := generate_value principal_bob_32 "be".
  737. Definition principal_bob_34 := assign_value principal_bob_33 (public_key (get principal_bob_33 "be")) "gbe".
  738. Definition principal_bob_35 := assign_value principal_bob_34 (DH (get principal_bob_34 "gae2")(get principal_bob_34 "be")) "bkshared2".
  739. Definition principal_bob_36 := assign_value principal_bob_35 (HKDF1 (get principal_bob_35 "bkshared2") (get principal_bob_35 "brkab1") (get principal_bob_35 "c2")) "brkba2".
  740. Definition principal_bob_37 := assign_value principal_bob_36 (HKDF2 (get principal_bob_36 "bkshared2") (get principal_bob_36 "brkab1") (get principal_bob_36 "c2")) "bckba2".
  741. Definition principal_bob_38 := assign_value principal_bob_37 (MAC (get principal_bob_37 "bckba2") (get principal_bob_37 "c3")) "unnamed_14".
  742. Definition principal_bob_39 := assign_value principal_bob_38 (HKDF1 (get principal_bob_38 "unnamed_14") (get principal_bob_38 "c1") (get principal_bob_38 "c4")) "bkenc3".
  743. Definition principal_bob_40 := assign_value principal_bob_39 (MAC (get principal_bob_39 "bckba2") (get principal_bob_39 "c3")) "unnamed_15".
  744. Definition principal_bob_41 := assign_value principal_bob_40 (HKDF2 (get principal_bob_40 "unnamed_15") (get principal_bob_40 "c1") (get principal_bob_40 "c4")) "bkenc4".
  745. Definition principal_bob_42 := assign_value principal_bob_41 (HASH3 (get principal_bob_41 "gblongterm") (get principal_bob_41 "galongterm") (get principal_bob_41 "gbe")) "unnamed_16".
  746. Definition principal_bob_43 := assign_value principal_bob_42 (AEAD_ENC (get principal_bob_41 "bkenc3") (get principal_bob_41 "m2") (get principal_bob_42 "unnamed_16")) "e2".
  747. Definition kmap_25 := update_principal_knowledgemap kmap_24 principal_bob_43.
  748. Definition kmap_26 := add_message_knowledgemap kmap_25 (message_constructor "Bob" "Alice" "gbe" unguarded).
  749. Definition kmap_27 := send_message kmap_26.
  750. Definition kmap_28 := add_message_knowledgemap kmap_27 (message_constructor "Bob" "Alice" "e2" unguarded).
  751. Definition kmap_29 := send_message kmap_28.
  752. Definition principal_alice_32 := get_principal_knowledgemap kmap_29 "Alice".
  753. Definition principal_alice_33 := assign_value principal_alice_32 (DH (get principal_alice_32 "gbe")(get principal_alice_32 "ae2")) "akshared2".
  754. Definition principal_alice_34 := assign_value principal_alice_33 (HKDF1 (get principal_alice_33 "akshared2") (get principal_alice_33 "arkab1") (get principal_alice_33 "c2")) "arkba2".
  755. Definition principal_alice_35 := assign_value principal_alice_34 (HKDF2 (get principal_alice_34 "akshared2") (get principal_alice_34 "arkab1") (get principal_alice_34 "c2")) "ackba2".
  756. Definition principal_alice_36 := assign_value principal_alice_35 (MAC (get principal_alice_35 "ackba2") (get principal_alice_35 "c3")) "unnamed_17".
  757. Definition principal_alice_37 := assign_value principal_alice_36 (HKDF1 (get principal_alice_36 "unnamed_17") (get principal_alice_36 "c1") (get principal_alice_36 "c4")) "akenc3".
  758. Definition principal_alice_38 := assign_value principal_alice_37 (MAC (get principal_alice_37 "ackba2") (get principal_alice_37 "c3")) "unnamed_18".
  759. Definition principal_alice_39 := assign_value principal_alice_38 (HKDF2 (get principal_alice_38 "unnamed_18") (get principal_alice_38 "c1") (get principal_alice_38 "c4")) "akenc4".
  760. Definition principal_alice_40 := assign_value principal_alice_39 (HASH3 (get principal_alice_39 "gblongterm") (get principal_alice_39 "galongterm") (get principal_alice_39 "gbe")) "unnamed_19".
  761. Definition principal_alice_41 := assign_value principal_alice_40 (AEAD_DEC (get principal_alice_39 "akenc3") (get principal_alice_39 "e2") (get principal_alice_40 "unnamed_19")) "m2_d".
  762. Definition kmap_30 := update_principal_knowledgemap kmap_29 principal_alice_41.
  763. Definition principal_alice_42 := get_principal_knowledgemap kmap_30 "Alice".
  764. Definition principal_alice_43 := generate_value principal_alice_42 "m3".
  765. Definition principal_alice_44 := generate_value principal_alice_43 "ae3".
  766. Definition principal_alice_45 := assign_value principal_alice_44 (public_key (get principal_alice_44 "ae3")) "gae3".
  767. Definition principal_alice_46 := assign_value principal_alice_45 (DH (get principal_alice_45 "gbe")(get principal_alice_45 "ae3")) "akshared3".
  768. Definition principal_alice_47 := assign_value principal_alice_46 (HKDF1 (get principal_alice_46 "akshared3") (get principal_alice_46 "arkba2") (get principal_alice_46 "c2")) "arkab3".
  769. Definition principal_alice_48 := assign_value principal_alice_47 (HKDF2 (get principal_alice_47 "akshared3") (get principal_alice_47 "arkba2") (get principal_alice_47 "c2")) "ackab3".
  770. Definition principal_alice_49 := assign_value principal_alice_48 (MAC (get principal_alice_48 "ackab3") (get principal_alice_48 "c3")) "unnamed_20".
  771. Definition principal_alice_50 := assign_value principal_alice_49 (HKDF1 (get principal_alice_49 "unnamed_20") (get principal_alice_49 "c1") (get principal_alice_49 "c4")) "akenc5".
  772. Definition principal_alice_51 := assign_value principal_alice_50 (MAC (get principal_alice_50 "ackab3") (get principal_alice_50 "c3")) "unnamed_21".
  773. Definition principal_alice_52 := assign_value principal_alice_51 (HKDF2 (get principal_alice_51 "unnamed_21") (get principal_alice_51 "c1") (get principal_alice_51 "c4")) "akenc6".
  774. Definition principal_alice_53 := assign_value principal_alice_52 (HASH3 (get principal_alice_52 "gblongterm") (get principal_alice_52 "galongterm") (get principal_alice_52 "gae3")) "unnamed_22".
  775. Definition principal_alice_54 := assign_value principal_alice_53 (AEAD_ENC (get principal_alice_52 "akenc5") (get principal_alice_52 "m3") (get principal_alice_53 "unnamed_22")) "e3".
  776. Definition kmap_31 := update_principal_knowledgemap kmap_30 principal_alice_54.
  777. Definition kmap_32 := add_message_knowledgemap kmap_31 (message_constructor "Alice" "Bob" "gae3" unguarded).
  778. Definition kmap_33 := send_message kmap_32.
  779. Definition kmap_34 := add_message_knowledgemap kmap_33 (message_constructor "Alice" "Bob" "e3" unguarded).
  780. Definition kmap_35 := send_message kmap_34.
  781. Definition principal_bob_44 := get_principal_knowledgemap kmap_35 "Bob".
  782. Definition principal_bob_45 := assign_value principal_bob_44 (DH (get principal_bob_44 "gae3")(get principal_bob_44 "be")) "bkshared3".
  783. Definition principal_bob_46 := assign_value principal_bob_45 (HKDF1 (get principal_bob_45 "bkshared3") (get principal_bob_45 "brkba2") (get principal_bob_45 "c2")) "brkab3".
  784. Definition principal_bob_47 := assign_value principal_bob_46 (HKDF2 (get principal_bob_46 "bkshared3") (get principal_bob_46 "brkba2") (get principal_bob_46 "c2")) "bckab3".
  785. Definition principal_bob_48 := assign_value principal_bob_47 (MAC (get principal_bob_47 "bckab3") (get principal_bob_47 "c3")) "unnamed_23".
  786. Definition principal_bob_49 := assign_value principal_bob_48 (HKDF1 (get principal_bob_48 "unnamed_23") (get principal_bob_48 "c1") (get principal_bob_48 "c4")) "bkenc5".
  787. Definition principal_bob_50 := assign_value principal_bob_49 (MAC (get principal_bob_49 "bckab3") (get principal_bob_49 "c3")) "unnamed_24".
  788. Definition principal_bob_51 := assign_value principal_bob_50 (HKDF2 (get principal_bob_50 "unnamed_24") (get principal_bob_50 "c1") (get principal_bob_50 "c4")) "bkenc6".
  789. Definition principal_bob_52 := assign_value principal_bob_51 (HASH3 (get principal_bob_51 "gblongterm") (get principal_bob_51 "galongterm") (get principal_bob_51 "gae3")) "unnamed_25".
  790. Definition principal_bob_53 := assign_value principal_bob_52 (AEAD_DEC (get principal_bob_51 "bkenc5") (get principal_bob_51 "e3") (get principal_bob_52 "unnamed_25")) "m3_d".
  791. Definition kmap_36 := update_principal_knowledgemap kmap_35 principal_bob_53.
  792. Definition principal_alice_55 := get_principal_knowledgemap kmap_36 "Alice".
  793. Definition principal_alice_56 := leak_value principal_alice_55 "alongterm".
  794. Definition kmap_37 := update_principal_knowledgemap kmap_36 principal_alice_56.
  795. Definition principal_bob_54 := get_principal_knowledgemap kmap_37 "Bob".
  796. Definition principal_bob_55 := leak_value principal_bob_54 "blongterm".
  797. Definition kmap_38 := update_principal_knowledgemap kmap_37 principal_bob_55.
  798. Compute(update_principal_knowledgemap kmap_37 principal_bob_55).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement