|
|
@@ -10,6 +10,11 @@ CMZ! { Basic<RistrettoPoint> :
|
|
|
attr2
|
|
|
}
|
|
|
|
|
|
+CMZ14Protocol! { basic_issue,
|
|
|
+ ,
|
|
|
+ A: Basic { attr1: S, attr2: S },
|
|
|
+}
|
|
|
+
|
|
|
CMZ14Protocol! { basic_proto,
|
|
|
A: Basic {
|
|
|
attr1: H,
|
|
|
@@ -35,7 +40,24 @@ fn test_basic() {
|
|
|
assert!(privkey == privkey_serde);
|
|
|
assert!(pubkey == pubkey_serde);
|
|
|
|
|
|
- let mut basic_cred = Basic::using_privkey(&privkey_serde);
|
|
|
+ // A showing proof needs an issued credential. An unissued credential has
|
|
|
+ // the identity as its MAC, which is rejected as an invalid instance point.
|
|
|
+ let (request, state) =
|
|
|
+ basic_issue::prepare(&mut rng, b"issue_basic", Basic::using_pubkey(&pubkey_serde)).unwrap();
|
|
|
+ let (reply, _) = basic_issue::handle(
|
|
|
+ &mut rng,
|
|
|
+ b"issue_basic",
|
|
|
+ request,
|
|
|
+ |a: &mut Basic| {
|
|
|
+ a.set_privkey(&privkey_serde);
|
|
|
+ a.attr1 = Some(Scalar::ZERO);
|
|
|
+ a.attr2 = Some(Scalar::ONE);
|
|
|
+ Ok(())
|
|
|
+ },
|
|
|
+ |_a: &Basic| Ok(()),
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
+ let basic_cred = state.finalize(reply).map_err(|(err, _state)| err).unwrap();
|
|
|
|
|
|
let basic_cred_bytes = postcard::to_allocvec(&basic_cred).unwrap();
|
|
|
|
|
|
@@ -43,9 +65,6 @@ fn test_basic() {
|
|
|
|
|
|
println!("{:#?}", basic_cred_bytes);
|
|
|
|
|
|
- basic_cred.attr1 = Some(Scalar::ZERO);
|
|
|
- basic_cred.attr2 = Some(Scalar::ONE);
|
|
|
-
|
|
|
let (req, state) = basic_proto::prepare(&mut rng, b"test_basic", &basic_cred).unwrap();
|
|
|
println!("{req:#?}");
|
|
|
println!("{state:#?}");
|