@@ -4,7 +4,7 @@ use std::fmt::{self, Debug};
4
4
5
5
use crate as frost;
6
6
use crate :: {
7
- challenge , Challenge , Ciphersuite , Error , Field , Group , { round1, * } ,
7
+ Challenge , Ciphersuite , Error , Field , Group , { round1, * } ,
8
8
} ;
9
9
10
10
#[ cfg( feature = "serde" ) ]
90
90
verifying_share : & frost:: keys:: VerifyingShare < C > ,
91
91
lambda_i : Scalar < C > ,
92
92
challenge : & Challenge < C > ,
93
+ group_commitment : & frost:: GroupCommitment < C > ,
94
+ verifying_key : & frost:: VerifyingKey < C > ,
93
95
) -> Result < ( ) , Error < C > > {
96
+ let mut commitment_share = group_commitment_share. 0 ;
97
+ let mut vsh = verifying_share. 0 ;
98
+ if <C >:: is_need_tweaking ( ) {
99
+ commitment_share = <C >:: tweaked_group_commitment_share (
100
+ & group_commitment_share. 0 ,
101
+ & group_commitment. 0
102
+ ) ;
103
+ vsh = <C >:: tweaked_verifying_share (
104
+ & verifying_share. 0 ,
105
+ & verifying_key. element
106
+ ) ;
107
+ }
94
108
if ( <C :: Group >:: generator ( ) * self . share )
95
- != ( group_commitment_share . 0 + ( verifying_share . 0 * challenge. 0 * lambda_i) )
109
+ != ( commitment_share + ( vsh * challenge. 0 * lambda_i) )
96
110
{
97
111
return Err ( Error :: InvalidSignatureShare {
98
112
culprit : identifier,
@@ -150,9 +164,7 @@ where
150
164
}
151
165
152
166
/// Compute the signature share for a signing operation.
153
- #[ cfg_attr( feature = "internals" , visibility:: make( pub ) ) ]
154
- #[ cfg_attr( docsrs, doc( cfg( feature = "internals" ) ) ) ]
155
- fn compute_signature_share < C : Ciphersuite > (
167
+ pub fn compute_signature_share < C : Ciphersuite > (
156
168
signer_nonces : & round1:: SigningNonces < C > ,
157
169
binding_factor : BindingFactor < C > ,
158
170
lambda_i : <<<C as Ciphersuite >:: Group as Group >:: Field as Field >:: Scalar ,
@@ -214,20 +226,33 @@ pub fn sign<C: Ciphersuite>(
214
226
let lambda_i = frost:: derive_interpolating_value ( key_package. identifier ( ) , signing_package) ?;
215
227
216
228
// Compute the per-message challenge.
217
- let challenge = challenge :: < C > (
229
+ let challenge = <C >:: challenge (
218
230
& group_commitment. 0 ,
219
231
& key_package. verifying_key ,
220
232
signing_package. message . as_slice ( ) ,
221
233
) ;
222
234
223
235
// Compute the Schnorr signature share.
224
- let signature_share = compute_signature_share (
225
- signer_nonces,
226
- binding_factor,
227
- lambda_i,
228
- key_package,
229
- challenge,
230
- ) ;
236
+ if <C >:: is_need_tweaking ( ) {
237
+ let signature_share = <C >:: compute_tweaked_signature_share (
238
+ signer_nonces,
239
+ binding_factor,
240
+ group_commitment,
241
+ lambda_i,
242
+ key_package,
243
+ challenge,
244
+ ) ;
231
245
232
- Ok ( signature_share)
246
+ Ok ( signature_share)
247
+ } else {
248
+ let signature_share = compute_signature_share (
249
+ signer_nonces,
250
+ binding_factor,
251
+ lambda_i,
252
+ key_package,
253
+ challenge,
254
+ ) ;
255
+
256
+ Ok ( signature_share)
257
+ }
233
258
}
0 commit comments