Browse Source

test: issue the credential before showing it

Michele Orrù 2 weeks ago
parent
commit
cc3eba13dc
1 changed files with 23 additions and 4 deletions
  1. 23 4
      tests/basic.rs

+ 23 - 4
tests/basic.rs

@@ -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:#?}");