priv_serialize.rs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. CMZ! { Basic<RistrettoPoint> :
  7. attr1,
  8. attr2
  9. }
  10. CMZ14Protocol! { basic_proto,
  11. A: Basic {
  12. attr1: H,
  13. attr2: H,
  14. }, , }
  15. // Test that the default serialization of a credential does _not_
  16. // include any private key material. Thanks to Morgan Hill from
  17. // Radically Open Security.
  18. #[test]
  19. fn test_default_serialize() {
  20. let mut rng = rand::thread_rng();
  21. let (privkey, pubkey) = Basic::cmz14_gen_keys(&mut rng);
  22. let mut basic_cred = Basic::using_privkey(&privkey);
  23. basic_cred.attr1 = Some(Scalar::ZERO);
  24. basic_cred.attr2 = Some(Scalar::ONE);
  25. basic_cred.create_MAC(&mut rng, &privkey).unwrap();
  26. let basic_cred_bytes = postcard::to_allocvec(&basic_cred).unwrap();
  27. let basic_cred_deser = postcard::from_bytes::<Basic>(&basic_cred_bytes).unwrap();
  28. assert_eq!(
  29. *basic_cred_deser.get_privkey(),
  30. CMZPrivkey::<RistrettoPoint>::default()
  31. );
  32. assert_eq!(*basic_cred_deser.get_pubkey(), pubkey);
  33. }
  34. // Test that the serialization with privkey of a credential _does_
  35. // include the private key material.
  36. #[test]
  37. fn test_priv_serialize() {
  38. let mut rng = rand::thread_rng();
  39. let (privkey, pubkey) = Basic::cmz14_gen_keys(&mut rng);
  40. let mut basic_cred = Basic::using_privkey(&privkey);
  41. basic_cred.attr1 = Some(Scalar::ZERO);
  42. basic_cred.attr2 = Some(Scalar::ONE);
  43. basic_cred.create_MAC(&mut rng, &privkey).unwrap();
  44. let basic_cred_bytes = basic_cred.serialize_with_privkey();
  45. let basic_cred_deser = Basic::deserialize_with_privkey(&basic_cred_bytes).unwrap();
  46. assert_eq!(*basic_cred_deser.get_privkey(), privkey);
  47. assert_eq!(*basic_cred_deser.get_pubkey(), pubkey);
  48. }