basic.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use cmz::*;
  2. use curve25519_dalek::ristretto::RistrettoPoint;
  3. use group::Group;
  4. use rand_core::RngCore;
  5. use sha2::Sha512;
  6. CMZ! { Basic<RistrettoPoint> :
  7. attr1,
  8. attr2
  9. }
  10. CMZProtocol! { basic_proto,
  11. A: Basic {
  12. attr1: H,
  13. attr2: H,
  14. }, , }
  15. #[test]
  16. fn test_basic() {
  17. let mut rng = rand::thread_rng();
  18. cmz_group_init(RistrettoPoint::hash_from_bytes::<Sha512>(
  19. b"CMZ Generator A",
  20. ));
  21. let (privkey, pubkey) = Basic::gen_keys(&mut rng);
  22. // Serialize and deserialize
  23. let privkey_bytes = bincode::serialize(&privkey).unwrap();
  24. let pubkey_bytes = bincode::serialize(&pubkey).unwrap();
  25. let privkey_serde = bincode::deserialize::<CMZPrivkey<RistrettoPoint>>(&privkey_bytes).unwrap();
  26. let pubkey_serde = bincode::deserialize::<CMZPubkey<RistrettoPoint>>(&pubkey_bytes).unwrap();
  27. assert!(privkey == privkey_serde);
  28. assert!(pubkey == pubkey_serde);
  29. let basic_cred = Basic::using_privkey(&privkey_serde);
  30. let basic_cred_bytes = bincode::serialize(&basic_cred).unwrap();
  31. println!("{:#?}", basic_cred);
  32. println!("{:#?}", basic_cred_bytes);
  33. let (req, state) = basic_proto::prepare(&basic_cred).unwrap();
  34. println!("{req:#?}");
  35. println!("{state:#?}");
  36. }