5
5
use crate :: checksum:: Checksum ;
6
6
use crate :: checksum:: ChecksumHasher ;
7
7
use crate :: checksum:: CHECKSUM_LEN ;
8
- use crate :: dkg:: error:: Error ;
9
8
use crate :: dkg:: group_key:: GroupSecretKeyShard ;
9
+ use crate :: error:: IronfishFrostError ;
10
10
use crate :: frost;
11
11
use crate :: frost:: keys:: dkg:: round1:: Package ;
12
12
use crate :: frost:: keys:: dkg:: round1:: SecretPackage ;
@@ -80,23 +80,24 @@ impl<'a> From<&'a SerializableSecretPackage> for &'a SecretPackage {
80
80
}
81
81
82
82
impl SerializableSecretPackage {
83
- fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> io :: Result < ( ) > {
83
+ fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> Result < ( ) , IronfishFrostError > {
84
84
writer. write_all ( & self . identifier . serialize ( ) ) ?;
85
85
write_variable_length ( & mut writer, & self . coefficients , |writer, scalar| {
86
86
writer. write_all ( & scalar. to_bytes ( ) )
87
87
} ) ?;
88
- write_variable_length ( & mut writer, self . commitment . serialize ( ) , |writer, array| {
88
+ let serialized = self . commitment . serialize ( ) ?;
89
+ write_variable_length ( & mut writer, serialized, |writer, array| {
89
90
writer. write_all ( & array)
90
91
} ) ?;
91
92
write_u16 ( & mut writer, self . min_signers ) ?;
92
93
write_u16 ( & mut writer, self . max_signers ) ?;
93
94
Ok ( ( ) )
94
95
}
95
96
96
- fn deserialize_from < R : io:: Read > ( mut reader : R ) -> io :: Result < Self > {
97
+ fn deserialize_from < R : io:: Read > ( mut reader : R ) -> Result < Self , IronfishFrostError > {
97
98
let mut identifier = [ 0u8 ; 32 ] ;
98
99
reader. read_exact ( & mut identifier) ?;
99
- let identifier = Identifier :: deserialize ( & identifier) . map_err ( io :: Error :: other ) ?;
100
+ let identifier = Identifier :: deserialize ( & identifier) ?;
100
101
101
102
let coefficients = read_variable_length ( & mut reader, |reader| {
102
103
let mut scalar = [ 0u8 ; 32 ] ;
@@ -112,8 +113,7 @@ impl SerializableSecretPackage {
112
113
reader. read_exact ( & mut array) ?;
113
114
Ok ( array)
114
115
} ,
115
- ) ?)
116
- . map_err ( io:: Error :: other) ?;
116
+ ) ?) ?;
117
117
118
118
let min_signers = read_u16 ( & mut reader) ?;
119
119
let max_signers = read_u16 ( & mut reader) ?;
@@ -153,8 +153,8 @@ pub fn export_secret_package<R: RngCore + CryptoRng>(
153
153
pub fn import_secret_package (
154
154
exported : & [ u8 ] ,
155
155
secret : & participant:: Secret ,
156
- ) -> io :: Result < SecretPackage > {
157
- let serialized = multienc:: decrypt ( secret, & exported) . map_err ( io:: Error :: other) ?;
156
+ ) -> Result < SecretPackage , IronfishFrostError > {
157
+ let serialized = multienc:: decrypt ( secret, exported) . map_err ( io:: Error :: other) ?;
158
158
SerializableSecretPackage :: deserialize_from ( & serialized[ ..] ) . map ( |pkg| pkg. into ( ) )
159
159
}
160
160
@@ -247,20 +247,20 @@ impl PublicPackage {
247
247
buf
248
248
}
249
249
250
- pub fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> io :: Result < ( ) > {
250
+ pub fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> Result < ( ) , IronfishFrostError > {
251
251
self . identity . serialize_into ( & mut writer) ?;
252
- let frost_package = self . frost_package . serialize ( ) . map_err ( io :: Error :: other ) ?;
252
+ let frost_package = self . frost_package . serialize ( ) ?;
253
253
write_variable_length_bytes ( & mut writer, & frost_package) ?;
254
254
writer. write_all ( & self . group_secret_key_shard_encrypted [ ..] ) ?;
255
255
writer. write_all ( & self . checksum . to_le_bytes ( ) ) ?;
256
256
Ok ( ( ) )
257
257
}
258
258
259
- pub fn deserialize_from < R : io:: Read > ( mut reader : R ) -> io :: Result < Self > {
259
+ pub fn deserialize_from < R : io:: Read > ( mut reader : R ) -> Result < Self , IronfishFrostError > {
260
260
let identity = Identity :: deserialize_from ( & mut reader) . expect ( "reading identity failed" ) ;
261
261
262
262
let frost_package = read_variable_length_bytes ( & mut reader) ?;
263
- let frost_package = Package :: deserialize ( & frost_package) . map_err ( io :: Error :: other ) ?;
263
+ let frost_package = Package :: deserialize ( & frost_package) ?;
264
264
265
265
let group_secret_key_shard_encrypted = read_encrypted_blob ( & mut reader) ?;
266
266
@@ -282,7 +282,7 @@ pub fn round1<'a, I, R>(
282
282
min_signers : u16 ,
283
283
participants : I ,
284
284
mut csrng : R ,
285
- ) -> Result < ( Vec < u8 > , PublicPackage ) , Error >
285
+ ) -> Result < ( Vec < u8 > , PublicPackage ) , IronfishFrostError >
286
286
where
287
287
I : IntoIterator < Item = & ' a Identity > ,
288
288
R : RngCore + CryptoRng ,
@@ -294,25 +294,21 @@ where
294
294
let participants = participants;
295
295
296
296
if !participants. contains ( & self_identity) {
297
- return Err ( Error :: InvalidInput (
298
- "participants must include self_identity" . to_string ( ) ,
299
- ) ) ;
297
+ return Err ( IronfishFrostError :: InvalidInput ) ;
300
298
}
301
299
302
- let max_signers = u16 :: try_from ( participants . len ( ) )
303
- . map_err ( |_| Error :: InvalidInput ( "too many participants" . to_string ( ) ) ) ?;
300
+ let max_signers =
301
+ u16 :: try_from ( participants . len ( ) ) . map_err ( |_| IronfishFrostError :: InvalidInput ) ?;
304
302
305
303
let ( secret_package, public_package) = frost:: keys:: dkg:: part1 (
306
304
self_identity. to_frost_identifier ( ) ,
307
305
max_signers,
308
306
min_signers,
309
307
& mut csrng,
310
- )
311
- . map_err ( Error :: FrostError ) ?;
308
+ ) ?;
312
309
313
310
let encrypted_secret_package =
314
- export_secret_package ( & secret_package, self_identity, & mut csrng)
315
- . map_err ( Error :: EncryptionError ) ?;
311
+ export_secret_package ( & secret_package, self_identity, & mut csrng) ?;
316
312
317
313
let group_secret_key_shard = GroupSecretKeyShard :: random ( & mut csrng) ;
318
314
0 commit comments