use cmz::*; use curve25519_dalek::ristretto::RistrettoPoint; use curve25519_dalek::scalar::Scalar; use group::Group; use rand_core::RngCore; use sha2::Sha512; CMZ! { Basic : attr1, attr2 } CMZ14Protocol! { basic_proto, A: Basic { attr1: H, attr2: H, }, , } #[test] fn test_basic() { let mut rng = rand::thread_rng(); cmz_group_init(RistrettoPoint::hash_from_bytes::( b"CMZ Generator A", )); let (privkey, pubkey) = Basic::cmz14_gen_keys(&mut rng); // Serialize and deserialize let privkey_bytes = bincode::serde::encode_to_vec(&privkey, bincode::config::legacy()).unwrap(); let pubkey_bytes = bincode::serde::encode_to_vec(&pubkey, bincode::config::legacy()).unwrap(); let privkey_serde = bincode::serde::decode_from_slice::< CMZPrivkey, bincode::config::Configuration, >(&privkey_bytes, bincode::config::legacy().with_no_limit()) .unwrap() .0; let pubkey_serde = bincode::serde::decode_from_slice::< CMZPubkey, bincode::config::Configuration, >(&pubkey_bytes, bincode::config::legacy()) .unwrap() .0; assert!(privkey == privkey_serde); assert!(pubkey == pubkey_serde); let mut basic_cred = Basic::using_privkey(&privkey_serde); let basic_cred_bytes = bincode::serde::encode_to_vec(&basic_cred, bincode::config::legacy()).unwrap(); println!("{:#?}", basic_cred); println!("{:#?}", basic_cred_bytes); basic_cred.attr1 = Some(Scalar::ZERO); basic_cred.attr2 = Some(Scalar::ONE); let (req, state) = basic_proto::prepare(&mut rng, &basic_cred).unwrap(); println!("{req:#?}"); println!("{state:#?}"); }