priv_serialize.rs 2.0 KB

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