two_groups.rs 1.1 KB

12345678910111213141516171819202122232425262728
  1. //! Basepoint derivation is keyed by group type, so two groups can coexist.
  2. use cmz::{cmz_basepoints, cmz_group_init};
  3. use curve25519_dalek::ristretto::RistrettoPoint;
  4. use group::Group;
  5. use sha2::Sha512;
  6. #[test]
  7. fn two_groups_coexist() {
  8. let ristretto_a = RistrettoPoint::hash_from_bytes::<Sha512>(b"CMZ Generator A");
  9. let p256_a = p256::ProjectivePoint::generator() * p256::Scalar::from(42u64);
  10. cmz_group_init::<RistrettoPoint>(ristretto_a);
  11. cmz_group_init::<p256::ProjectivePoint>(p256_a);
  12. // Each group must read back its own basepoints, not the other's.
  13. assert_eq!(cmz_basepoints::<RistrettoPoint>().A(), ristretto_a);
  14. assert_eq!(cmz_basepoints::<RistrettoPoint>().B(), RistrettoPoint::generator());
  15. assert_eq!(cmz_basepoints::<p256::ProjectivePoint>().A(), p256_a);
  16. assert_eq!(
  17. cmz_basepoints::<p256::ProjectivePoint>().B(),
  18. p256::ProjectivePoint::generator()
  19. );
  20. // Re-initializing keeps the first value, per cmz_group_init's contract.
  21. cmz_group_init::<RistrettoPoint>(RistrettoPoint::generator());
  22. assert_eq!(cmz_basepoints::<RistrettoPoint>().A(), ristretto_a);
  23. }