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
79
80
81
82
83
84
85
86
87
88
89
90
91
use crate::{
BlsSecretKey, Credential, CredentialAttribute, CredentialFragment1, CredentialFragment2,
CredentialOffer, CredentialPresentation, CredentialRequest, CredentialSchema, OfferId,
PresentationManifest, ProofBytes, ProofRequestId, SigningPublicKey,
};
use ockam_core::Result;
pub trait CredentialIssuer {
fn get_signing_key(&mut self) -> Result<BlsSecretKey>;
fn get_signing_public_key(&mut self) -> Result<SigningPublicKey>;
fn create_offer(&mut self, schema: &CredentialSchema) -> Result<CredentialOffer>;
fn create_proof_of_possession(&mut self) -> Result<ProofBytes>;
fn sign_credential(
&mut self,
schema: &CredentialSchema,
attributes: &[CredentialAttribute],
) -> Result<Credential>;
fn sign_credential_request(
&mut self,
request: &CredentialRequest,
schema: &CredentialSchema,
attributes: &[(String, CredentialAttribute)],
offer_id: OfferId,
) -> Result<CredentialFragment2>;
}
pub trait CredentialHolder {
fn accept_credential_offer(
&mut self,
offer: &CredentialOffer,
signing_public_key: SigningPublicKey,
) -> Result<(CredentialRequest, CredentialFragment1)>;
fn combine_credential_fragments(
&mut self,
credential_fragment1: CredentialFragment1,
credential_fragment2: CredentialFragment2,
) -> Result<Credential>;
fn is_valid_credential(
&mut self,
credential: &Credential,
verifier_key: SigningPublicKey,
) -> Result<bool>;
fn present_credentials(
&mut self,
credential: &[Credential],
presentation_manifests: &[PresentationManifest],
proof_request_id: ProofRequestId,
) -> Result<Vec<CredentialPresentation>>;
}
pub trait CredentialVerifier {
fn create_proof_request_id(&mut self) -> Result<ProofRequestId>;
fn verify_proof_of_possession(
&mut self,
issuer_vk: SigningPublicKey,
proof: ProofBytes,
) -> Result<bool>;
fn verify_credential_presentations(
&mut self,
presentations: &[CredentialPresentation],
presentation_manifests: &[PresentationManifest],
proof_request_id: ProofRequestId,
) -> Result<bool>;
}