Skip to content

Commit 7e8c186

Browse files
authored
Merge pull request #66 from iron-fish/fix/hughy/dkg-round2-decrypt-secret-pkg
automatically decrypt secret package in round2
2 parents fc81d54 + 1438e2e commit 7e8c186

File tree

2 files changed

+19
-48
lines changed

2 files changed

+19
-48
lines changed

src/dkg/round2.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::dkg::error::Error;
1111
use crate::dkg::round1;
1212
use crate::frost;
1313
use crate::frost::keys::dkg::round1::Package as Round1Package;
14-
use crate::frost::keys::dkg::round1::SecretPackage as Round1SecretPackage;
1514
use crate::frost::keys::dkg::round2::Package;
1615
use crate::frost::keys::dkg::round2::SecretPackage;
1716
use crate::frost::keys::VerifiableSecretSharingCommitment;
@@ -258,19 +257,21 @@ impl PublicPackage {
258257
}
259258

260259
pub fn round2<'a, P, R>(
261-
self_identity: &Identity,
262-
round1_secret_package: &Round1SecretPackage,
260+
secret: &participant::Secret,
261+
round1_secret_package: &[u8],
263262
round1_public_packages: P,
264263
mut csrng: R,
265264
) -> Result<(Vec<u8>, Vec<PublicPackage>), Error>
266265
where
267266
P: IntoIterator<Item = &'a round1::PublicPackage>,
268267
R: RngCore + CryptoRng,
269268
{
270-
let round1_public_packages = round1_public_packages.into_iter().collect::<Vec<_>>();
269+
let self_identity = secret.to_identity();
270+
let round1_secret_package = round1::import_secret_package(round1_secret_package, secret)
271+
.map_err(Error::DecryptionError)?;
271272

272273
// Extract the min/max signers from the secret package
273-
let (min_signers, max_signers) = round1::get_secret_package_signers(round1_secret_package);
274+
let (min_signers, max_signers) = round1::get_secret_package_signers(&round1_secret_package);
274275

275276
let round1_public_packages = round1_public_packages.into_iter().collect::<Vec<_>>();
276277

@@ -333,7 +334,7 @@ where
333334

334335
// Encrypt the secret package
335336
let encrypted_secret_package =
336-
export_secret_package(&round2_secret_package, self_identity, &mut csrng)
337+
export_secret_package(&round2_secret_package, &self_identity, &mut csrng)
337338
.map_err(Error::EncryptionError)?;
338339

339340
// Convert the Identifier->Package map to an Identity->PublicPackage map
@@ -545,11 +546,8 @@ mod tests {
545546
)
546547
.expect("round 1 failed");
547548

548-
let round1_secret_package = round1::import_secret_package(&round1_secret_package, &secret)
549-
.expect("secret package import failed");
550-
551549
let (secret_package, round2_public_packages) = super::round2(
552-
&identity1,
550+
&secret,
553551
&round1_secret_package,
554552
[&package1, &package2, &package3],
555553
thread_rng(),
@@ -583,12 +581,9 @@ mod tests {
583581
.map(|id| round1::round1(id, 2, &identities, thread_rng()).expect("dkg round 1 failed"))
584582
.collect::<Vec<_>>();
585583

586-
let round1_secret_package = round1::import_secret_package(&round1_packages[0].0, &secret)
587-
.expect("secret package import failed");
588-
589584
let result = super::round2(
590-
&identities[0],
591-
&round1_secret_package,
585+
&secret,
586+
&round1_packages[0].0,
592587
[
593588
&round1_packages[0].1,
594589
&round1_packages[0].1,
@@ -618,12 +613,9 @@ mod tests {
618613
.map(|id| round1::round1(id, 2, &identities, thread_rng()).expect("dkg round 1 failed"))
619614
.collect::<Vec<_>>();
620615

621-
let round1_secret_package = round1::import_secret_package(&round1_packages[0].0, &secret)
622-
.expect("secret package import failed");
623-
624616
let result = super::round2(
625-
&identities[0],
626-
&round1_secret_package,
617+
&secret,
618+
&round1_packages[0].0,
627619
[&round1_packages[0].1, &round1_packages[1].1],
628620
thread_rng(),
629621
);

src/dkg/round3.rs

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -162,22 +162,16 @@ mod tests {
162162
round1::round1(&identity2, 2, [&identity1, &identity2], thread_rng())
163163
.expect("round 1 failed");
164164

165-
let round1_secret_package_1 =
166-
round1::import_secret_package(&round1_secret_package_1, &secret1)
167-
.expect("secret package import failed");
168165
let (encrypted_secret_package, _) = round2::round2(
169-
&identity1,
166+
&secret1,
170167
&round1_secret_package_1,
171168
[&package1, &package2],
172169
thread_rng(),
173170
)
174171
.expect("round 2 failed");
175172

176-
let round1_secret_package_2 =
177-
round1::import_secret_package(&round1_secret_package_2, &secret2)
178-
.expect("secret package import failed");
179173
let (_, round2_public_packages_2) = round2::round2(
180-
&identity2,
174+
&secret2,
181175
&round1_secret_package_2,
182176
[&package1, &package2],
183177
thread_rng(),
@@ -217,22 +211,16 @@ mod tests {
217211
round1::round1(&identity2, 2, [&identity1, &identity2], thread_rng())
218212
.expect("round 1 failed");
219213

220-
let round1_secret_package_1 =
221-
round1::import_secret_package(&round1_secret_package_1, &secret1)
222-
.expect("secret package import failed");
223214
let (encrypted_secret_package, _) = round2::round2(
224-
&identity1,
215+
&secret1,
225216
&round1_secret_package_1,
226217
[&package1, &package2],
227218
thread_rng(),
228219
)
229220
.expect("round 2 failed");
230221

231-
let round1_secret_package_2 =
232-
round1::import_secret_package(&round1_secret_package_2, &secret2)
233-
.expect("secret package import failed");
234222
let (_, round2_public_packages_2) = round2::round2(
235-
&identity2,
223+
&secret2,
236224
&round1_secret_package_2,
237225
[&package1, &package2],
238226
thread_rng(),
@@ -290,33 +278,24 @@ mod tests {
290278
)
291279
.expect("round 1 failed");
292280

293-
let round1_secret_package_1 =
294-
round1::import_secret_package(&round1_secret_package_1, &secret1)
295-
.expect("secret package import failed");
296281
let (encrypted_secret_package, _) = round2::round2(
297-
&identity1,
282+
&secret1,
298283
&round1_secret_package_1,
299284
[&package1, &package2, &package3],
300285
thread_rng(),
301286
)
302287
.expect("round 2 failed");
303288

304-
let round1_secret_package_2 =
305-
round1::import_secret_package(&round1_secret_package_2, &secret2)
306-
.expect("secret package import failed");
307289
let (_, round2_public_packages_2) = round2::round2(
308-
&identity2,
290+
&secret2,
309291
&round1_secret_package_2,
310292
[&package1, &package2, &package3],
311293
thread_rng(),
312294
)
313295
.expect("round 2 failed");
314296

315-
let round1_secret_package_3 =
316-
round1::import_secret_package(&round1_secret_package_3, &secret3)
317-
.expect("secret package import failed");
318297
let (_, round2_public_packages_3) = round2::round2(
319-
&identity3,
298+
&secret3,
320299
&round1_secret_package_3,
321300
[&package1, &package2, &package3],
322301
thread_rng(),

0 commit comments

Comments
 (0)