basic.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. use cmz::*;
  2. use curve25519_dalek::ristretto::RistrettoPoint;
  3. use curve25519_dalek::scalar::Scalar;
  4. use group::Group;
  5. use rand_core::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::serde::encode_to_vec(&privkey, bincode::config::legacy()).unwrap();
  25. let pubkey_bytes = bincode::serde::encode_to_vec(&pubkey, bincode::config::legacy()).unwrap();
  26. let privkey_serde = bincode::serde::decode_from_slice::<
  27. CMZPrivkey<RistrettoPoint>,
  28. bincode::config::Configuration,
  29. >(&privkey_bytes, bincode::config::legacy().with_no_limit())
  30. .unwrap()
  31. .0;
  32. let pubkey_serde = bincode::serde::decode_from_slice::<
  33. CMZPubkey<RistrettoPoint>,
  34. bincode::config::Configuration,
  35. >(&pubkey_bytes, bincode::config::legacy())
  36. .unwrap()
  37. .0;
  38. assert!(privkey == privkey_serde);
  39. assert!(pubkey == pubkey_serde);
  40. let mut basic_cred = Basic::using_privkey(&privkey_serde);
  41. let basic_cred_bytes =
  42. bincode::serde::encode_to_vec(&basic_cred, bincode::config::legacy()).unwrap();
  43. println!("{:#?}", basic_cred);
  44. println!("{:#?}", basic_cred_bytes);
  45. basic_cred.attr1 = Some(Scalar::ZERO);
  46. basic_cred.attr2 = Some(Scalar::ONE);
  47. let (req, state) = basic_proto::prepare(&mut rng, &basic_cred).unwrap();
  48. println!("{req:#?}");
  49. println!("{state:#?}");
  50. }