@@ -23,14 +23,16 @@ impl SingleSigner {
23
23
///
24
24
/// If no lottery are won None will be returned.
25
25
pub fn sign ( & self , message : & ProtocolMessage ) -> StdResult < Option < SingleSignatures > > {
26
- match self . protocol_signer . sign ( message. compute_hash ( ) . as_bytes ( ) ) {
26
+ let signed_message = message. compute_hash ( ) ;
27
+ match self . protocol_signer . sign ( signed_message. as_bytes ( ) ) {
27
28
Some ( signature) => {
28
29
let won_indexes = signature. indexes . clone ( ) ;
29
30
30
- Ok ( Some ( SingleSignatures :: new (
31
+ Ok ( Some ( SingleSignatures :: new_with_signed_message (
31
32
self . party_id . to_owned ( ) ,
32
33
signature. into ( ) ,
33
34
won_indexes,
35
+ signed_message,
34
36
) ) )
35
37
}
36
38
None => Ok ( None ) ,
@@ -72,4 +74,32 @@ mod test {
72
74
73
75
assert ! ( signature. is_some( ) ) ;
74
76
}
77
+
78
+ #[ test]
79
+ fn embed_signed_message_in_issued_signature ( ) {
80
+ let fixture = MithrilFixtureBuilder :: default ( ) . with_signers ( 3 ) . build ( ) ;
81
+ let signers = fixture. signers_fixture ( ) ;
82
+ let signer = signers. first ( ) . unwrap ( ) ;
83
+
84
+ let ( single_signer, _) = SignerBuilder :: new (
85
+ & fixture. signers_with_stake ( ) ,
86
+ & fixture. protocol_parameters ( ) ,
87
+ )
88
+ . unwrap ( )
89
+ . build_test_single_signer (
90
+ signer. signer_with_stake . clone ( ) ,
91
+ signer. kes_secret_key_path ( ) ,
92
+ )
93
+ . unwrap ( ) ;
94
+
95
+ let message = ProtocolMessage :: default ( ) ;
96
+ let signature = single_signer
97
+ . sign ( & message)
98
+ . expect ( "Single signer should be able to issue single signature" ) ;
99
+
100
+ assert_eq ! (
101
+ Some ( message. compute_hash( ) ) ,
102
+ signature. and_then( |s| s. signed_message)
103
+ ) ;
104
+ }
75
105
}
0 commit comments