@@ -27,29 +27,17 @@ pub enum MultiSignatureError {
27
27
KeyInvalid ( Box < VerificationKeyPoP > ) ,
28
28
}
29
29
30
- /// Errors which can be output by Mithril verification.
30
+ /// Errors which can be output by Mithril single signature verification.
31
31
#[ derive( Debug , Clone , thiserror:: Error ) ]
32
- pub enum StmSignatureError < D : Digest + FixedOutput > {
33
- /// No quorum was found
34
- #[ error( "No Quorum was found." ) ]
35
- NoQuorum ,
36
-
32
+ pub enum StmSignatureError {
37
33
/// The IVK is invalid after aggregating the keys
38
34
#[ error( "Aggregated key does not correspond to the expected key." ) ]
39
35
IvkInvalid ( VerificationKey ) ,
40
36
41
- /// Mu is not the sum of the signatures
42
- #[ error( "Aggregated signature does not correspond to the expected signature." ) ]
43
- SumInvalid ( Signature ) ,
44
-
45
37
/// There is an index out of bounds
46
38
#[ error( "Received index, {0}, is higher than what the security parameter allows, {1}." ) ]
47
39
IndexBoundFailed ( u64 , u64 ) ,
48
40
49
- /// There is a duplicate index
50
- #[ error( "Indeces are not unique." ) ]
51
- IndexNotUnique ,
52
-
53
41
/// MSP.Eval was computed incorrectly
54
42
#[ error( "The claimed evaluation of function phi is incorrect." ) ]
55
43
EvalInvalid ( [ u8 ; 64 ] ) ,
@@ -62,6 +50,30 @@ pub enum StmSignatureError<D: Digest + FixedOutput> {
62
50
#[ error( "A provided signature is invalid" ) ]
63
51
SingleSignatureInvalid ( Signature ) ,
64
52
53
+ /// This error occurs when the the serialization of the raw bytes failed
54
+ #[ error( "Invalid bytes" ) ]
55
+ SerializationError ,
56
+ }
57
+
58
+ /// Errors which can be output by Mithril aggregate verification.
59
+ #[ derive( Debug , Clone , thiserror:: Error ) ]
60
+ pub enum StmAggregateSignatureError < D : Digest + FixedOutput > {
61
+ /// No quorum was found
62
+ #[ error( "No Quorum was found." ) ]
63
+ NoQuorum ,
64
+
65
+ /// The IVK is invalid after aggregating the keys
66
+ #[ error( "Aggregated key does not correspond to the expected key." ) ]
67
+ IvkInvalid ( VerificationKey ) ,
68
+
69
+ /// There is an index out of bounds
70
+ #[ error( "Received index, {0}, is higher than what the security parameter allows, {1}." ) ]
71
+ IndexBoundFailed ( u64 , u64 ) ,
72
+
73
+ /// There is a duplicate index
74
+ #[ error( "Indices are not unique." ) ]
75
+ IndexNotUnique ,
76
+
65
77
/// The aggregated signature is invalid
66
78
#[ error( "Aggregate signature is invalid" ) ]
67
79
SignatureInvalid ,
@@ -123,7 +135,7 @@ pub enum RegisterError {
123
135
UnregisteredInitializer ,
124
136
}
125
137
126
- impl < D : Digest + FixedOutput > From < RegisterError > for StmSignatureError < D > {
138
+ impl From < RegisterError > for StmSignatureError {
127
139
fn from ( e : RegisterError ) -> Self {
128
140
match e {
129
141
RegisterError :: SerializationError => Self :: SerializationError ,
@@ -134,7 +146,7 @@ impl<D: Digest + FixedOutput> From<RegisterError> for StmSignatureError<D> {
134
146
}
135
147
}
136
148
137
- impl < D : Digest + FixedOutput > From < MerkleTreeError < D > > for StmSignatureError < D > {
149
+ impl < D : Digest + FixedOutput > From < MerkleTreeError < D > > for StmAggregateSignatureError < D > {
138
150
fn from ( e : MerkleTreeError < D > ) -> Self {
139
151
match e {
140
152
MerkleTreeError :: BatchPathInvalid ( e) => Self :: PathInvalid ( e) ,
@@ -144,17 +156,41 @@ impl<D: Digest + FixedOutput> From<MerkleTreeError<D>> for StmSignatureError<D>
144
156
}
145
157
}
146
158
147
- impl < D : Digest + FixedOutput > From < MultiSignatureError > for StmSignatureError < D > {
159
+ impl From < MultiSignatureError > for StmSignatureError {
148
160
fn from ( e : MultiSignatureError ) -> Self {
149
161
match e {
150
162
MultiSignatureError :: SerializationError => Self :: SerializationError ,
151
163
MultiSignatureError :: KeyInvalid ( e) => Self :: IvkInvalid ( e. vk ) ,
152
164
MultiSignatureError :: SignatureInvalid ( e) => Self :: SingleSignatureInvalid ( e) ,
165
+ MultiSignatureError :: AggregateSignatureInvalid => unreachable ! ( ) ,
166
+ }
167
+ }
168
+ }
169
+
170
+ impl < D : Digest + FixedOutput > From < MultiSignatureError > for StmAggregateSignatureError < D > {
171
+ fn from ( e : MultiSignatureError ) -> Self {
172
+ match e {
173
+ MultiSignatureError :: SerializationError => Self :: SerializationError ,
174
+ MultiSignatureError :: KeyInvalid ( e) => Self :: IvkInvalid ( e. vk ) ,
175
+ MultiSignatureError :: SignatureInvalid ( _e) => unreachable ! ( ) ,
153
176
MultiSignatureError :: AggregateSignatureInvalid => Self :: SignatureInvalid ,
154
177
}
155
178
}
156
179
}
157
180
181
+ impl < D : Digest + FixedOutput > From < StmSignatureError > for StmAggregateSignatureError < D > {
182
+ fn from ( e : StmSignatureError ) -> Self {
183
+ match e {
184
+ StmSignatureError :: SerializationError => Self :: SerializationError ,
185
+ StmSignatureError :: IvkInvalid ( e) => Self :: IvkInvalid ( e) ,
186
+ StmSignatureError :: SingleSignatureInvalid ( _e) => unreachable ! ( ) ,
187
+ StmSignatureError :: IndexBoundFailed ( e, _e) => Self :: IndexBoundFailed ( e, _e) ,
188
+ StmSignatureError :: LotteryLost => unreachable ! ( ) ,
189
+ StmSignatureError :: EvalInvalid ( _e) => unreachable ! ( ) ,
190
+ }
191
+ }
192
+ }
193
+
158
194
impl From < MultiSignatureError > for RegisterError {
159
195
fn from ( e : MultiSignatureError ) -> Self {
160
196
match e {
0 commit comments