From d518c5c5cff92d4494e33ca7e5c8a202be2a5978 Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Fri, 1 Mar 2024 14:07:02 -0300 Subject: [PATCH] core: remove MulAssign impl for Scalar --- frost-core/CHANGELOG.md | 7 +++++++ frost-core/src/identifier.rs | 9 --------- frost-core/src/keys.rs | 2 +- frost-core/src/lib.rs | 8 ++++---- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/frost-core/CHANGELOG.md b/frost-core/CHANGELOG.md index 4821c47..ec03874 100644 --- a/frost-core/CHANGELOG.md +++ b/frost-core/CHANGELOG.md @@ -4,6 +4,13 @@ Entries are listed in reverse chronological order. ## Unreleased +## 2.0.0 + +* Removed the `MulAssign> for Scalar` implementation since it + will result in a coherence error in future Rust versions (see #625). In the + unlikely case you're using this, you can replace e.g. `scalar *= identifier` + with `scalar = identifier * scalar`. + ## Released ## 1.0.0 diff --git a/frost-core/src/identifier.rs b/frost-core/src/identifier.rs index 5525197..edb64cf 100644 --- a/frost-core/src/identifier.rs +++ b/frost-core/src/identifier.rs @@ -149,15 +149,6 @@ where } } -impl std::ops::MulAssign> for Scalar -where - C: Ciphersuite, -{ - fn mul_assign(&mut self, identifier: Identifier) { - *self = *self * identifier.0 - } -} - impl std::ops::Sub for Identifier where C: Ciphersuite, diff --git a/frost-core/src/keys.rs b/frost-core/src/keys.rs index 533cb13f..19b2577 100644 --- a/frost-core/src/keys.rs +++ b/frost-core/src/keys.rs @@ -610,7 +610,7 @@ fn evaluate_polynomial( let ell_scalar = identifier; for coeff in coefficients.iter().skip(1).rev() { value = value + *coeff; - value *= ell_scalar; + value = ell_scalar * value; } value = value + *coefficients diff --git a/frost-core/src/lib.rs b/frost-core/src/lib.rs index ba0ed59..1dcb9fa 100644 --- a/frost-core/src/lib.rs +++ b/frost-core/src/lib.rs @@ -302,12 +302,12 @@ fn compute_lagrange_coefficient( } if let Some(x) = x { - num *= x - *x_j; - den *= x_i - *x_j; + num = (x - *x_j) * num; + den = (x_i - *x_j) * den; } else { // Both signs inverted just to avoid requiring Neg (-*xj) - num *= *x_j; - den *= *x_j - x_i; + num = *x_j * num; + den = (*x_j - x_i) * den; } } if !x_i_found {