@@ -4,11 +4,11 @@ use super::{
4
4
} ;
5
5
use crate :: {
6
6
bbs:: {
7
- ciphersuites:: BbsCiphersuiteParameters ,
8
7
core:: {
9
8
generator:: memory_cached_generator:: MemoryCachedGenerators ,
10
9
types:: ProofMessage ,
11
10
} ,
11
+ interface:: BbsInterfaceParameter ,
12
12
} ,
13
13
error:: Error ,
14
14
schemes:: bbs:: core:: {
@@ -34,42 +34,43 @@ pub fn get_proof_size(num_undisclosed_messages: usize) -> usize {
34
34
}
35
35
36
36
// helper function for parsing a BBS Proof Generation Request
37
- fn _parse_request_helper < T , C > (
37
+ fn _parse_request_helper < T , I > (
38
38
request : & BbsProofGenRequest < ' _ , T > ,
39
39
) -> Result <
40
40
(
41
41
PublicKey ,
42
42
Signature ,
43
- MemoryCachedGenerators < C > ,
43
+ MemoryCachedGenerators < I > ,
44
44
Vec < ProofMessage > ,
45
45
) ,
46
46
Error ,
47
47
>
48
48
where
49
49
T : AsRef < [ u8 ] > ,
50
- C : BbsCiphersuiteParameters ,
50
+ I : BbsInterfaceParameter ,
51
51
{
52
52
// Parse public key from request
53
53
let pk = PublicKey :: from_octets ( request. public_key ) ?;
54
54
55
55
let ( digested_messages, proof_messages) =
56
- digest_proof_messages :: < _ , C > ( request. messages ) ?;
56
+ digest_proof_messages :: < _ , I > ( request. messages ) ?;
57
57
58
58
// Derive generators
59
59
let generators =
60
- MemoryCachedGenerators :: < C > :: new ( digested_messages. len ( ) , None ) ?;
60
+ MemoryCachedGenerators :: < I > :: new ( digested_messages. len ( ) , None ) ?;
61
61
62
62
// Parse signature from request
63
63
let signature = Signature :: from_octets ( request. signature ) ?;
64
64
65
65
let verify_signature = request. verify_signature . unwrap_or ( true ) ;
66
66
if verify_signature {
67
67
// Verify the signature to check the messages supplied are valid
68
- if !( signature. verify :: < _ , _ , _ , C > (
68
+ if !( signature. verify :: < _ , _ , _ , I :: Ciphersuite > (
69
69
& pk,
70
70
request. header . as_ref ( ) ,
71
71
& generators,
72
72
& digested_messages,
73
+ Some ( I :: api_id ( ) ) ,
73
74
) ?) {
74
75
return Err ( Error :: SignatureVerification ) ;
75
76
}
@@ -79,36 +80,37 @@ where
79
80
}
80
81
81
82
// Generate a BBS signature proof of knowledge.
82
- pub ( crate ) fn proof_gen < T , C > (
83
+ pub ( crate ) fn proof_gen < T , I > (
83
84
request : & BbsProofGenRequest < ' _ , T > ,
84
85
) -> Result < Vec < u8 > , Error >
85
86
where
86
87
T : AsRef < [ u8 ] > ,
87
- C : BbsCiphersuiteParameters ,
88
+ I : BbsInterfaceParameter ,
88
89
{
89
90
let ( pk, signature, generators, proof_messages) =
90
- _parse_request_helper :: < T , C > ( request) ?;
91
+ _parse_request_helper :: < T , I > ( request) ?;
91
92
92
93
// Generate the proof
93
- let proof = Proof :: new :: < _ , _ , C > (
94
+ let proof = Proof :: new :: < _ , _ , I :: Ciphersuite > (
94
95
& pk,
95
96
& signature,
96
97
request. header . as_ref ( ) ,
97
98
request. presentation_header . as_ref ( ) ,
98
99
& generators,
99
100
& proof_messages,
101
+ Some ( I :: api_id ( ) ) ,
100
102
) ?;
101
103
102
104
Ok ( proof. to_octets ( ) )
103
105
}
104
106
105
107
// Verify a BBS signature proof of knowledge.
106
- pub ( crate ) fn proof_verify < T , C > (
108
+ pub ( crate ) fn proof_verify < T , I > (
107
109
request : & BbsProofVerifyRequest < ' _ , T > ,
108
110
) -> Result < bool , Error >
109
111
where
110
112
T : AsRef < [ u8 ] > ,
111
- C : BbsCiphersuiteParameters ,
113
+ I : BbsInterfaceParameter ,
112
114
{
113
115
// Parse public key from request
114
116
let public_key = PublicKey :: from_octets ( request. public_key ) ?;
@@ -124,43 +126,45 @@ where
124
126
125
127
// Digest the revealed proof messages
126
128
let messages: BTreeMap < usize , Message > =
127
- digest_revealed_proof_messages :: < _ , C > ( messages, total_message_count) ?;
129
+ digest_revealed_proof_messages :: < _ , I > ( messages, total_message_count) ?;
128
130
129
131
// Derive generators
130
132
let generators =
131
- MemoryCachedGenerators :: < C > :: new ( total_message_count, None ) ?;
133
+ MemoryCachedGenerators :: < I > :: new ( total_message_count, None ) ?;
132
134
133
- proof. verify :: < _ , _ , C > (
135
+ proof. verify :: < _ , _ , I :: Ciphersuite > (
134
136
& public_key,
135
137
request. header . as_ref ( ) ,
136
138
request. presentation_header . as_ref ( ) ,
137
139
& generators,
138
140
& messages,
141
+ Some ( I :: api_id ( ) ) ,
139
142
)
140
143
}
141
144
142
145
// Generate a BBS signature proof of knowledge with a given rng.
143
146
#[ cfg( feature = "__private_bbs_fixtures_generator_api" ) ]
144
- pub ( crate ) fn proof_gen_with_rng < T , R , C > (
147
+ pub ( crate ) fn proof_gen_with_rng < T , R , I > (
145
148
request : & BbsProofGenRequest < ' _ , T > ,
146
149
rng : R ,
147
150
) -> Result < Vec < u8 > , Error >
148
151
where
149
152
T : AsRef < [ u8 ] > ,
150
153
R : RngCore + CryptoRng ,
151
- C : BbsCiphersuiteParameters ,
154
+ I : BbsInterfaceParameter ,
152
155
{
153
156
let ( pk, signature, generators, proof_messages) =
154
- _parse_request_helper :: < T , C > ( request) ?;
157
+ _parse_request_helper :: < T , I > ( request) ?;
155
158
156
159
// Generate the proof
157
- let proof = Proof :: new_with_rng :: < _ , _ , _ , C > (
160
+ let proof = Proof :: new_with_rng :: < _ , _ , _ , I :: Ciphersuite > (
158
161
& pk,
159
162
& signature,
160
163
request. header . as_ref ( ) ,
161
164
request. presentation_header . as_ref ( ) ,
162
165
& generators,
163
166
& proof_messages,
167
+ Some ( I :: api_id ( ) ) ,
164
168
rng,
165
169
) ?;
166
170
0 commit comments