3
2

submodule.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #![allow(non_snake_case)]
  2. use cmz::*;
  3. use curve25519_dalek::ristretto::RistrettoPoint;
  4. use curve25519_dalek::scalar::Scalar;
  5. use group::Group;
  6. use rand_core::RngCore;
  7. use sha2::Sha512;
  8. pub mod cred {
  9. use super::*;
  10. CMZ! { Basic<RistrettoPoint>: x, y, z }
  11. }
  12. pub mod submod {
  13. use super::cred::Basic;
  14. use super::*;
  15. CMZ14Protocol! { issue_proto,
  16. ,
  17. N: Basic { x: J, y: H, z: I },
  18. }
  19. CMZ14Protocol! { basic_proto,
  20. A: Basic { x: H, y: R, z: I },
  21. N: Basic { x: J, y: H, z: I },
  22. }
  23. #[test]
  24. fn test_submodule() -> Result<(), CMZError> {
  25. let mut rng = rand::thread_rng();
  26. cmz_group_init(RistrettoPoint::hash_from_bytes::<Sha512>(
  27. b"CMZ Generator A",
  28. ));
  29. let (privkey, pubkey) = Basic::cmz14_gen_keys(&mut rng);
  30. let mut basic_iss = Basic::using_pubkey(&pubkey);
  31. basic_iss.x = Some(Scalar::ZERO);
  32. basic_iss.y = Some(Scalar::ONE);
  33. basic_iss.z = Some(Scalar::ONE);
  34. let (ireq, istate) = issue_proto::prepare(&mut rng, basic_iss).unwrap();
  35. let (ireply, _) = issue_proto::handle(
  36. &mut rng,
  37. ireq,
  38. |N: &mut Basic| {
  39. N.set_privkey(&privkey);
  40. N.z = Some(Scalar::ONE);
  41. Ok(())
  42. },
  43. |_N: &Basic| Ok(()),
  44. )?;
  45. let basic_cred = match istate.finalize(ireply) {
  46. Ok(c) => c,
  47. Err((err, _)) => return Err(err),
  48. };
  49. let mut basic_new = Basic::using_pubkey(&pubkey);
  50. basic_new.y = Some(2u128.into());
  51. basic_new.z = Some(3u128.into());
  52. let (req, state) = basic_proto::prepare(&mut rng, &basic_cred, basic_new).unwrap();
  53. let (reply, _) = basic_proto::handle(
  54. &mut rng,
  55. req,
  56. |A: &mut Basic, N: &mut Basic| {
  57. A.set_privkey(&privkey);
  58. A.z = Some(Scalar::ONE);
  59. N.set_privkey(&privkey);
  60. N.z = Some(3u128.into());
  61. Ok(())
  62. },
  63. |_A: &Basic, _N: &Basic| Ok(()),
  64. )?;
  65. let res = state.finalize(reply);
  66. match res {
  67. Ok(_) => Ok(()),
  68. Err((err, _state)) => Err(err),
  69. }
  70. }
  71. }