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 ;
@@ -87,23 +87,24 @@ impl<'a> From<&'a SerializableSecretPackage> for &'a SecretPackage {
87
87
}
88
88
89
89
impl SerializableSecretPackage {
90
- fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> io :: Result < ( ) > {
90
+ fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> Result < ( ) , IronfishFrostError > {
91
91
writer. write_all ( & self . identifier . serialize ( ) ) ?;
92
92
write_variable_length ( & mut writer, & self . coefficients , |writer, scalar| {
93
93
writer. write_all ( & scalar. to_bytes ( ) )
94
94
} ) ?;
95
- write_variable_length ( & mut writer, self . commitment . serialize ( ) , |writer, array| {
95
+ let serialized = self . commitment . serialize ( ) ?;
96
+ write_variable_length ( & mut writer, serialized, |writer, array| {
96
97
writer. write_all ( & array)
97
98
} ) ?;
98
99
write_u16 ( & mut writer, self . min_signers ) ?;
99
100
write_u16 ( & mut writer, self . max_signers ) ?;
100
101
Ok ( ( ) )
101
102
}
102
103
103
- fn deserialize_from < R : io:: Read > ( mut reader : R ) -> io :: Result < Self > {
104
+ fn deserialize_from < R : io:: Read > ( mut reader : R ) -> Result < Self , IronfishFrostError > {
104
105
let mut identifier = [ 0u8 ; 32 ] ;
105
106
reader. read_exact ( & mut identifier) ?;
106
- let identifier = Identifier :: deserialize ( & identifier) . map_err ( io :: Error :: other ) ?;
107
+ let identifier = Identifier :: deserialize ( & identifier) ?;
107
108
108
109
let coefficients = read_variable_length ( & mut reader, |reader| {
109
110
let mut scalar = [ 0u8 ; 32 ] ;
@@ -119,8 +120,7 @@ impl SerializableSecretPackage {
119
120
reader. read_exact ( & mut array) ?;
120
121
Ok ( array)
121
122
} ,
122
- ) ?)
123
- . map_err ( io:: Error :: other) ?;
123
+ ) ?) ?;
124
124
125
125
let min_signers = read_u16 ( & mut reader) ?;
126
126
let max_signers = read_u16 ( & mut reader) ?;
@@ -160,7 +160,7 @@ pub fn export_secret_package<R: RngCore + CryptoRng>(
160
160
pub fn import_secret_package (
161
161
exported : & [ u8 ] ,
162
162
secret : & participant:: Secret ,
163
- ) -> io :: Result < SecretPackage > {
163
+ ) -> Result < SecretPackage , IronfishFrostError > {
164
164
let serialized = multienc:: decrypt ( secret, exported) . map_err ( io:: Error :: other) ?;
165
165
SerializableSecretPackage :: deserialize_from ( & serialized[ ..] ) . map ( |pkg| pkg. into ( ) )
166
166
}
@@ -254,21 +254,22 @@ impl PublicPackage {
254
254
buf
255
255
}
256
256
257
- pub fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> io :: Result < ( ) > {
257
+ pub fn serialize_into < W : io:: Write > ( & self , mut writer : W ) -> Result < ( ) , IronfishFrostError > {
258
258
self . identity . serialize_into ( & mut writer) ?;
259
- let frost_package = self . frost_package . serialize ( ) . map_err ( io :: Error :: other ) ?;
259
+ let frost_package = self . frost_package . serialize ( ) ?;
260
260
write_variable_length_bytes ( & mut writer, & frost_package) ?;
261
261
write_variable_length_bytes ( & mut writer, & self . group_secret_key_shard_encrypted ) ?;
262
262
writer. write_all ( & self . checksum . to_le_bytes ( ) ) ?;
263
263
Ok ( ( ) )
264
264
}
265
265
266
- pub fn deserialize_from < R : io:: Read > ( mut reader : R ) -> io :: Result < Self > {
266
+ pub fn deserialize_from < R : io:: Read > ( mut reader : R ) -> Result < Self , IronfishFrostError > {
267
267
let identity = Identity :: deserialize_from ( & mut reader) . expect ( "reading identity failed" ) ;
268
268
269
269
let frost_package = read_variable_length_bytes ( & mut reader) ?;
270
- let frost_package = Package :: deserialize ( & frost_package) . map_err ( io:: Error :: other) ?;
271
- let group_secret_key_shard_encrypted = read_variable_length_bytes ( & mut reader) ?;
270
+ let frost_package = Package :: deserialize ( & frost_package) ?;
271
+
272
+ let group_secret_key_shard_encrypted = read_encrypted_blob ( & mut reader) ?;
272
273
273
274
let mut checksum = [ 0u8 ; CHECKSUM_LEN ] ;
274
275
reader. read_exact ( & mut checksum) ?;
@@ -288,7 +289,7 @@ pub fn round1<'a, I, R>(
288
289
min_signers : u16 ,
289
290
participants : I ,
290
291
mut csrng : R ,
291
- ) -> Result < ( Vec < u8 > , PublicPackage ) , Error >
292
+ ) -> Result < ( Vec < u8 > , PublicPackage ) , IronfishFrostError >
292
293
where
293
294
I : IntoIterator < Item = & ' a Identity > ,
294
295
R : RngCore + CryptoRng ,
@@ -300,25 +301,21 @@ where
300
301
let participants = participants;
301
302
302
303
if !participants. contains ( & self_identity) {
303
- return Err ( Error :: InvalidInput (
304
- "participants must include self_identity" . to_string ( ) ,
305
- ) ) ;
304
+ return Err ( IronfishFrostError :: InvalidInput ) ;
306
305
}
307
306
308
- let max_signers = u16 :: try_from ( participants . len ( ) )
309
- . map_err ( |_| Error :: InvalidInput ( "too many participants" . to_string ( ) ) ) ?;
307
+ let max_signers =
308
+ u16 :: try_from ( participants . len ( ) ) . map_err ( |_| IronfishFrostError :: InvalidInput ) ?;
310
309
311
310
let ( secret_package, public_package) = frost:: keys:: dkg:: part1 (
312
311
self_identity. to_frost_identifier ( ) ,
313
312
max_signers,
314
313
min_signers,
315
314
& mut csrng,
316
- )
317
- . map_err ( Error :: FrostError ) ?;
315
+ ) ?;
318
316
319
317
let encrypted_secret_package =
320
- export_secret_package ( & secret_package, self_identity, & mut csrng)
321
- . map_err ( Error :: EncryptionError ) ?;
318
+ export_secret_package ( & secret_package, self_identity, & mut csrng) ?;
322
319
323
320
let group_secret_key_shard = GroupSecretKeyShard :: random ( & mut csrng) ;
324
321
0 commit comments