From 48d528917ce9539da6a63ec9c90d32de763da4f9 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Mon, 11 May 2026 10:13:30 -0700 Subject: [PATCH] DRY the interpolating value derivation code --- frost-core/src/lib.rs | 50 +++++++++++++++++++--------------------- frost-core/src/round2.rs | 18 +-------------- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/frost-core/src/lib.rs b/frost-core/src/lib.rs index 7be4bc8..cbd6c6f 100644 --- a/frost-core/src/lib.rs +++ b/frost-core/src/lib.rs @@ -341,15 +341,29 @@ fn derive_interpolating_value( signer_id: &Identifier, signing_package: &SigningPackage, ) -> Result, Error> { - compute_lagrange_coefficient( - &signing_package - .signing_commitments() - .keys() - .cloned() - .collect(), - None, - *signer_id, - ) + match &signing_package.signing_participants_groups { + Some(signing_participants_groups) => { + let signing_participants_group = signing_participants_groups.iter().find(|g| g.contains(signer_id)); + + match signing_participants_group { + Some(group) => compute_lagrange_coefficient( + group, + None, + *signer_id, + ), + None => Err(Error::UnknownIdentifier), + } + } + None => compute_lagrange_coefficient( + &signing_package + .signing_commitments() + .keys() + .cloned() + .collect(), + None, + *signer_id, + ), + } } /// Generated by the coordinator of the signing operation and distributed to @@ -874,23 +888,7 @@ fn verify_signature_share_precomputed( verifying_share: &keys::VerifyingShare, challenge: Challenge, ) -> Result<(), Error> { - let lambda_i = match signing_package.signing_participants_groups.clone() { - Some(signing_participants_groups) => { - let mut result: Result, Error> = Err(Error::UnknownIdentifier); - for signing_participants_group in signing_participants_groups { - if signing_participants_group.contains(&signature_share_identifier) { - result = compute_lagrange_coefficient( - &signing_participants_group, - None, - signature_share_identifier, - ); - break; - } - } - result? - } - None => derive_interpolating_value(&signature_share_identifier, signing_package)?, - }; + let lambda_i = derive_interpolating_value(&signature_share_identifier, signing_package)?; let binding_factor = binding_factor_list .get(&signature_share_identifier) diff --git a/frost-core/src/round2.rs b/frost-core/src/round2.rs index 3fd3060..b7a1e90 100644 --- a/frost-core/src/round2.rs +++ b/frost-core/src/round2.rs @@ -160,23 +160,7 @@ pub fn sign( let group_commitment = compute_group_commitment(&signing_package, &binding_factor_list)?; // Compute Lagrange coefficient. - let lambda_i = match signing_package.signing_participants_groups.clone() { - Some(signing_participants_groups) => { - let mut result: Result, Error> = Err(Error::UnknownIdentifier); - for signing_participants_group in signing_participants_groups { - if signing_participants_group.contains(key_package.identifier()) { - result = frost::compute_lagrange_coefficient( - &signing_participants_group, - None, - *key_package.identifier(), - ); - break; - } - } - result? - } - None => frost::derive_interpolating_value(key_package.identifier(), &signing_package)?, - }; + let lambda_i = frost::derive_interpolating_value(key_package.identifier(), &signing_package)?; // Compute the per-message challenge. let challenge = ::challenge(