3
1

macro_test.rs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. use curve25519_dalek::{RistrettoPoint, Scalar};
  2. use group::Group;
  3. use rand::rngs::OsRng;
  4. use sigma_compiler::sigma_compiler;
  5. type G = RistrettoPoint;
  6. #[allow(non_snake_case)]
  7. #[test]
  8. fn test_cli_proof1() {
  9. sigma_compiler! {
  10. client_proof < G >,
  11. (rand s_iss_cred_UAC, iss_Jattr_UAC_nym_id, pub
  12. _iss_Rattr_UAC_measurement_count, pub _iss_Rattr_UAC_age,),
  13. (cind X_iss_Jattr_UAC_nym_id, C_iss_cred_UAC, cind const A_generator, cind
  14. const B_generator,),
  15. C_iss_cred_UAC = s_iss_cred_UAC * A_generator + iss_Jattr_UAC_nym_id * X_iss_Jattr_UAC_nym_id,
  16. };
  17. // Rng
  18. let mut rng = OsRng;
  19. // Witness
  20. let s_iss_cred_UAC = Scalar::random(&mut rng);
  21. let iss_Jattr_UAC_nym_id = Scalar::random(&mut rng);
  22. // Parameters
  23. let X_iss_Jattr_UAC_nym_id = G::random(&mut rng);
  24. let A_generator = G::generator();
  25. let C_iss_cred_UAC =
  26. s_iss_cred_UAC * A_generator + iss_Jattr_UAC_nym_id * X_iss_Jattr_UAC_nym_id;
  27. let B_generator = G::default();
  28. let iss_Rattr_UAC_measurement_count = Scalar::default();
  29. let iss_Rattr_UAC_age = Scalar::default();
  30. // Protocol
  31. let protocol = client_proof::Protocol::new(
  32. A_generator,
  33. B_generator,
  34. C_iss_cred_UAC,
  35. X_iss_Jattr_UAC_nym_id,
  36. iss_Rattr_UAC_age,
  37. iss_Rattr_UAC_measurement_count,
  38. );
  39. let witness = client_proof::Witness(vec![iss_Jattr_UAC_nym_id, s_iss_cred_UAC]);
  40. let proof = client_proof::prove(&protocol, &witness);
  41. assert!(proof.is_ok());
  42. let verify_result = client_proof::verify(&protocol, &proof.unwrap());
  43. assert!(verify_result.is_ok());
  44. }
  45. #[allow(non_snake_case)]
  46. #[test]
  47. fn test_iss_proof() {
  48. sigma_compiler! {
  49. issuer_proof < G > ,
  50. (rand b_iss_cred_UAC, x0_iss_cred_UAC,),
  51. (P_iss_cred_UAC, X0_iss_cred_UAC, K_iss_cred_UAC, R_iss_cred_UAC, cind
  52. const A_generator, cind const B_generator,),
  53. P_iss_cred_UAC = b_iss_cred_UAC * A_generator,
  54. X0_iss_cred_UAC = x0_iss_cred_UAC * B_generator,
  55. R_iss_cred_UAC = x0_iss_cred_UAC * P_iss_cred_UAC + b_iss_cred_UAC * K_iss_cred_UAC,
  56. };
  57. // Rng
  58. let mut rng = OsRng;
  59. // Witness
  60. let b_iss_cred_UAC = Scalar::random(&mut rng);
  61. let x0_iss_cred_UAC = Scalar::random(&mut rng);
  62. // Parameters
  63. let A_generator = G::generator();
  64. let B_generator = G::default();
  65. let K_iss_cred_UAC = G::random(&mut rng);
  66. let P_iss_cred_UAC = b_iss_cred_UAC * A_generator;
  67. let R_iss_cred_UAC = x0_iss_cred_UAC * P_iss_cred_UAC + b_iss_cred_UAC * K_iss_cred_UAC;
  68. let X0_iss_cred_UAC = x0_iss_cred_UAC * B_generator;
  69. // Protocol
  70. let protocol = issuer_proof::Protocol::new(
  71. A_generator,
  72. B_generator,
  73. K_iss_cred_UAC,
  74. P_iss_cred_UAC,
  75. R_iss_cred_UAC,
  76. X0_iss_cred_UAC,
  77. );
  78. let witness = issuer_proof::Witness(vec![b_iss_cred_UAC, x0_iss_cred_UAC]);
  79. let proof = issuer_proof::prove(&protocol, &witness);
  80. assert!(proof.is_ok());
  81. let verify_result = issuer_proof::verify(&protocol, &proof.unwrap());
  82. assert!(verify_result.is_ok());
  83. }
  84. #[allow(non_snake_case)]
  85. #[test]
  86. fn test_cli_proof2() {
  87. sigma_compiler! {
  88. client_proof < G > ,
  89. (rand s_iss_cred_New, rand zQ_show_cred_Old, rand z_show_Hattr_Old_nym_id,
  90. rand z_show_Hattr_Old_age, rand z_show_Hattr_Old_measurement_count,
  91. iss_Hattr_New_measurement_count, iss_Hattr_New_age, iss_Hattr_New_nym_id,
  92. show_Hattr_Old_nym_id, show_Hattr_Old_age,
  93. show_Hattr_Old_measurement_count,),
  94. (cind X_iss_Hattr_New_measurement_count, cind X_iss_Hattr_New_age, cind
  95. X_iss_Hattr_New_nym_id, cind P_show_cred_Old, cind
  96. X_show_Hattr_Old_nym_id, cind X_show_Hattr_Old_age, cind
  97. X_show_Hattr_Old_measurement_count, C_iss_cred_New, V_show_cred_Old,
  98. C_show_Hattr_Old_nym_id, C_show_Hattr_Old_age,
  99. C_show_Hattr_Old_measurement_count, cind const A_generator, cind const
  100. B_generator,),
  101. // show_Hattr_Old_nym_id == iss_Hattr_New_nym_id &&
  102. // show_Hattr_Old_age == iss_Hattr_New_age &&
  103. // show_Hattr_Old_measurement_count + Scalar :: from(1u64) == iss_Hattr_New_measurement_count,
  104. C_iss_cred_New = s_iss_cred_New * A_generator + iss_Hattr_New_measurement_count *
  105. X_iss_Hattr_New_measurement_count + iss_Hattr_New_age *
  106. X_iss_Hattr_New_age + iss_Hattr_New_nym_id * X_iss_Hattr_New_nym_id,
  107. C_show_Hattr_Old_nym_id = show_Hattr_Old_nym_id * P_show_cred_Old +
  108. z_show_Hattr_Old_nym_id * A_generator,
  109. C_show_Hattr_Old_age = show_Hattr_Old_age * P_show_cred_Old + z_show_Hattr_Old_age * A_generator,
  110. C_show_Hattr_Old_measurement_count = show_Hattr_Old_measurement_count *
  111. P_show_cred_Old + z_show_Hattr_Old_measurement_count * A_generator,
  112. V_show_cred_Old = zQ_show_cred_Old * B_generator + z_show_Hattr_Old_nym_id
  113. * X_show_Hattr_Old_nym_id + z_show_Hattr_Old_age * X_show_Hattr_Old_age +
  114. z_show_Hattr_Old_measurement_count * X_show_Hattr_Old_measurement_count,
  115. }
  116. // Rng
  117. let mut rng = OsRng;
  118. // Witness
  119. let iss_Hattr_New_age = Scalar::random(&mut rng);
  120. let iss_Hattr_New_measurement_count = Scalar::random(&mut rng);
  121. let iss_Hattr_New_nym_id = Scalar::random(&mut rng);
  122. let show_Hattr_Old_age = Scalar::random(&mut rng);
  123. let show_Hattr_Old_measurement_count = Scalar::random(&mut rng);
  124. let show_Hattr_Old_nym_id = Scalar::random(&mut rng);
  125. let s_iss_cred_New = Scalar::random(&mut rng);
  126. let zQ_show_cred_Old = Scalar::random(&mut rng);
  127. let z_show_Hattr_Old_age = Scalar::random(&mut rng);
  128. let z_show_Hattr_Old_measurement_count = Scalar::random(&mut rng);
  129. let z_show_Hattr_Old_nym_id = Scalar::random(&mut rng);
  130. // Parameters
  131. let A_generator = G::generator();
  132. let B_generator = G::default();
  133. let P_show_cred_Old = G::random(&mut rng);
  134. let X_show_Hattr_Old_age = G::random(&mut rng);
  135. let X_show_Hattr_Old_nym_id = G::random(&mut rng);
  136. let X_show_Hattr_Old_measurement_count = G::random(&mut rng);
  137. let X_iss_Hattr_New_age = G::random(&mut rng);
  138. let X_iss_Hattr_New_nym_id = G::random(&mut rng);
  139. let X_iss_Hattr_New_measurement_count = G::random(&mut rng);
  140. let C_iss_cred_New = s_iss_cred_New * A_generator
  141. + iss_Hattr_New_measurement_count * X_iss_Hattr_New_measurement_count
  142. + iss_Hattr_New_age * X_iss_Hattr_New_age
  143. + iss_Hattr_New_nym_id * X_iss_Hattr_New_nym_id;
  144. let C_show_Hattr_Old_age =
  145. show_Hattr_Old_age * P_show_cred_Old + z_show_Hattr_Old_age * A_generator;
  146. let C_show_Hattr_Old_nym_id =
  147. show_Hattr_Old_nym_id * P_show_cred_Old + z_show_Hattr_Old_nym_id * A_generator;
  148. let C_show_Hattr_Old_measurement_count = show_Hattr_Old_measurement_count * P_show_cred_Old
  149. + z_show_Hattr_Old_measurement_count * A_generator;
  150. let V_show_cred_Old = zQ_show_cred_Old * B_generator
  151. + z_show_Hattr_Old_nym_id * X_show_Hattr_Old_nym_id
  152. + z_show_Hattr_Old_age * X_show_Hattr_Old_age
  153. + z_show_Hattr_Old_measurement_count * X_show_Hattr_Old_measurement_count;
  154. // Protocol
  155. let protocol = client_proof::Protocol::new(
  156. A_generator,
  157. B_generator,
  158. C_iss_cred_New,
  159. C_show_Hattr_Old_age,
  160. C_show_Hattr_Old_measurement_count,
  161. C_show_Hattr_Old_nym_id,
  162. P_show_cred_Old,
  163. V_show_cred_Old,
  164. X_iss_Hattr_New_age,
  165. X_iss_Hattr_New_measurement_count,
  166. X_iss_Hattr_New_nym_id,
  167. X_show_Hattr_Old_age,
  168. X_show_Hattr_Old_measurement_count,
  169. X_show_Hattr_Old_nym_id,
  170. );
  171. let witness = client_proof::Witness(vec![
  172. iss_Hattr_New_age,
  173. iss_Hattr_New_measurement_count,
  174. iss_Hattr_New_nym_id,
  175. s_iss_cred_New,
  176. show_Hattr_Old_age,
  177. show_Hattr_Old_measurement_count,
  178. show_Hattr_Old_nym_id,
  179. zQ_show_cred_Old,
  180. z_show_Hattr_Old_age,
  181. z_show_Hattr_Old_measurement_count,
  182. z_show_Hattr_Old_nym_id,
  183. ]);
  184. let proof = client_proof::prove(&protocol, &witness);
  185. assert!(proof.is_ok());
  186. let verify_result = client_proof::verify(&protocol, &proof.unwrap());
  187. assert!(verify_result.is_ok());
  188. }