basic.rs 1.4 KB

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