-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsignature.rs
78 lines (66 loc) · 2.61 KB
/
signature.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//! Integration test for signature validation part.
use catalyst_signed_doc::{providers::tests::TestVerifyingKeyProvider, *};
mod common;
#[tokio::test]
async fn single_signature_validation_test() {
let (signed_doc, pk, kid) = common::create_dummy_signed_doc(None).unwrap();
assert!(!signed_doc.problem_report().is_problematic());
// case: has key
let mut provider = TestVerifyingKeyProvider::default();
provider.add_pk(kid.clone(), pk);
assert!(validator::validate_signatures(&signed_doc, &provider)
.await
.is_ok_and(|v| v));
// case: empty provider
assert!(
validator::validate_signatures(&signed_doc, &TestVerifyingKeyProvider::default())
.await
.is_ok_and(|v| !v)
);
}
#[tokio::test]
async fn multiple_signatures_validation_test() {
let (sk1, pk1, kid1) = common::create_dummy_key_pair().unwrap();
let (sk2, pk2, kid2) = common::create_dummy_key_pair().unwrap();
let (sk3, pk3, kid3) = common::create_dummy_key_pair().unwrap();
let (_, pk_n, kid_n) = common::create_dummy_key_pair().unwrap();
let signed_doc = Builder::new()
.with_decoded_content(serde_json::to_vec(&serde_json::Value::Null).unwrap())
.with_json_metadata(common::test_metadata().2)
.unwrap()
.add_signature(sk1.to_bytes(), kid1.clone())
.unwrap()
.add_signature(sk2.to_bytes(), kid2.clone())
.unwrap()
.add_signature(sk3.to_bytes(), kid3.clone())
.unwrap()
.build();
assert!(!signed_doc.problem_report().is_problematic());
// case: all signatures valid
let mut provider = TestVerifyingKeyProvider::default();
provider.add_pk(kid1.clone(), pk1);
provider.add_pk(kid2.clone(), pk2);
provider.add_pk(kid3.clone(), pk3);
assert!(validator::validate_signatures(&signed_doc, &provider)
.await
.is_ok_and(|v| v));
// case: partially available signatures
let mut provider = TestVerifyingKeyProvider::default();
provider.add_pk(kid1.clone(), pk1);
provider.add_pk(kid2.clone(), pk2);
assert!(validator::validate_signatures(&signed_doc, &provider)
.await
.is_ok_and(|v| !v));
// case: with unrecognized provider
let mut provider = TestVerifyingKeyProvider::default();
provider.add_pk(kid_n.clone(), pk_n);
assert!(validator::validate_signatures(&signed_doc, &provider)
.await
.is_ok_and(|v| !v));
// case: no valid signatures available
assert!(
validator::validate_signatures(&signed_doc, &TestVerifyingKeyProvider::default())
.await
.is_ok_and(|v| !v)
);
}