|
|
@@ -0,0 +1,28 @@
|
|
|
+//! Basepoint derivation is keyed by group type, so two groups can coexist.
|
|
|
+
|
|
|
+use cmz::{cmz_basepoints, cmz_group_init};
|
|
|
+use curve25519_dalek::ristretto::RistrettoPoint;
|
|
|
+use group::Group;
|
|
|
+use sha2::Sha512;
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn two_groups_coexist() {
|
|
|
+ let ristretto_a = RistrettoPoint::hash_from_bytes::<Sha512>(b"CMZ Generator A");
|
|
|
+ let p256_a = p256::ProjectivePoint::generator() * p256::Scalar::from(42u64);
|
|
|
+
|
|
|
+ cmz_group_init::<RistrettoPoint>(ristretto_a);
|
|
|
+ cmz_group_init::<p256::ProjectivePoint>(p256_a);
|
|
|
+
|
|
|
+ // Each group must read back its own basepoints, not the other's.
|
|
|
+ assert_eq!(cmz_basepoints::<RistrettoPoint>().A(), ristretto_a);
|
|
|
+ assert_eq!(cmz_basepoints::<RistrettoPoint>().B(), RistrettoPoint::generator());
|
|
|
+ assert_eq!(cmz_basepoints::<p256::ProjectivePoint>().A(), p256_a);
|
|
|
+ assert_eq!(
|
|
|
+ cmz_basepoints::<p256::ProjectivePoint>().B(),
|
|
|
+ p256::ProjectivePoint::generator()
|
|
|
+ );
|
|
|
+
|
|
|
+ // Re-initializing keeps the first value, per cmz_group_init's contract.
|
|
|
+ cmz_group_init::<RistrettoPoint>(RistrettoPoint::generator());
|
|
|
+ assert_eq!(cmz_basepoints::<RistrettoPoint>().A(), ristretto_a);
|
|
|
+}
|