pub struct AuthenticatedDensePoly<C: CurveGroup> {
pub coeffs: Vec<AuthenticatedScalarResult<C>>,
}
Expand description
An authenticated polynomial; i.e. a polynomial in which the coefficients are secret shared between parties
This is modeled after the ark_poly::DensePolynomial
source
Fields§
§coeffs: Vec<AuthenticatedScalarResult<C>>
A vector of coefficients, the coefficient for x^i
is stored at index
i
Implementations§
Source§impl<C: CurveGroup> AuthenticatedDensePoly<C>
impl<C: CurveGroup> AuthenticatedDensePoly<C>
Sourcepub fn from_coeffs(coeffs: Vec<AuthenticatedScalarResult<C>>) -> Self
pub fn from_coeffs(coeffs: Vec<AuthenticatedScalarResult<C>>) -> Self
Constructor
Sourcepub fn zero(fabric: &MpcFabric<C>) -> Self
pub fn zero(fabric: &MpcFabric<C>) -> Self
Allocate the zero polynomial (additive identity) in the given fabric
Sourcepub fn one(fabric: &MpcFabric<C>) -> Self
pub fn one(fabric: &MpcFabric<C>) -> Self
Allocate the one polynomial (multiplicative identity) in the given fabric
Sourcepub fn random(d: usize, fabric: &MpcFabric<C>) -> Self
pub fn random(d: usize, fabric: &MpcFabric<C>) -> Self
Sample a random polynomial of given degree
Sourcepub fn eval(&self, x: &ScalarResult<C>) -> AuthenticatedScalarResult<C>
pub fn eval(&self, x: &ScalarResult<C>) -> AuthenticatedScalarResult<C>
Evaluate the polynomial at a given point
TODO: Opt for a more efficient implementation that allocates fewer gates, i.e. by awaiting all results then creating the evaluation
Sourcepub fn open(&self) -> DensePolynomialResult<C> ⓘ
pub fn open(&self) -> DensePolynomialResult<C> ⓘ
Open the polynomial to the base type DensePolynomial
Sourcepub fn open_authenticated(&self) -> AuthenticatedDensePolyOpenResult<C> ⓘ
pub fn open_authenticated(&self) -> AuthenticatedDensePolyOpenResult<C> ⓘ
Open the polynomial and authenticate the shares
Source§impl<C: CurveGroup> AuthenticatedDensePoly<C>
Inversion and division helpers
impl<C: CurveGroup> AuthenticatedDensePoly<C>
Inversion and division helpers
Sourcepub fn mod_xn(&self, n: usize) -> Self
pub fn mod_xn(&self, n: usize) -> Self
Reduce a given polynomial mod x^n
For a modulus of this form, this is equivalent to truncating the coefficients
Sourcepub fn rev(&self) -> Self
pub fn rev(&self) -> Self
Reverse the coefficients of the polynomial and return a new polynomial
This is useful when implementing division between authenticated polynomials as per: https://iacr.org/archive/pkc2006/39580045/39580045.pdf Effectively, for a given polynomial a(x), the operation rev(a) returns the polynomial: rev(a)(x) = x^deg(a) * a(1/x) which is emulated by reversing the coefficients directly.
See the division docstring below for a more detailed explanation
Sourcepub fn random_polynomial(n: usize, fabric: &MpcFabric<C>) -> Self
pub fn random_polynomial(n: usize, fabric: &MpcFabric<C>) -> Self
Get a random, shared masking polynomial of degree n
Sourcepub fn mul_inverse_mod_t(&self, t: usize) -> Self
pub fn mul_inverse_mod_t(&self, t: usize) -> Self
Compute the multiplicative inverse of a polynomial in the quotient ring F[x] / (x^t)
Uses an extension of the inverse method defined in: https://dl.acm.org/doi/pdf/10.1145/72981.72995
Trait Implementations§
Source§impl<C: CurveGroup> Add<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Add<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomial<C::ScalarField>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomial<C::ScalarField>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for DensePolynomial<C::ScalarField>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for DensePolynomial<C::ScalarField>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: CurveGroup> Add<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Add<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§fn add(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
fn add(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
+
operation. Read moreSource§impl<'a, C: CurveGroup> Add<&'a DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§fn add(self, rhs: &'a DensePolynomial<C::ScalarField>) -> Self::Output
fn add(self, rhs: &'a DensePolynomial<C::ScalarField>) -> Self::Output
+
operation. Read moreSource§impl<C: CurveGroup> Add<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Add<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Add<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a DensePolynomial<C::ScalarField>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a DensePolynomial<C::ScalarField>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Add<AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: CurveGroup> Add<AuthenticatedDensePoly<C>> for DensePolynomial<C::ScalarField>
lhs owned, rhs owned
impl<C: CurveGroup> Add<AuthenticatedDensePoly<C>> for DensePolynomial<C::ScalarField>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: CurveGroup> Add<AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs owned
impl<C: CurveGroup> Add<AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<'a, C: CurveGroup> Add<DensePolynomial<<C as Group>::ScalarField>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Add<DensePolynomial<<C as Group>::ScalarField>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§fn add(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
fn add(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
+
operation. Read moreSource§impl<C: CurveGroup> Add<DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Add<DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§fn add(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
fn add(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
+
operation. Read moreSource§impl<'a, C: CurveGroup> Add<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Add<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: CurveGroup> Add<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Add<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: CurveGroup> Add for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Add for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
+
operator.Source§impl<C: Clone + CurveGroup> Clone for AuthenticatedDensePoly<C>
impl<C: Clone + CurveGroup> Clone for AuthenticatedDensePoly<C>
Source§fn clone(&self) -> AuthenticatedDensePoly<C>
fn clone(&self) -> AuthenticatedDensePoly<C>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<C: Debug + CurveGroup> Debug for AuthenticatedDensePoly<C>
impl<C: Debug + CurveGroup> Debug for AuthenticatedDensePoly<C>
Source§impl<C: Default + CurveGroup> Default for AuthenticatedDensePoly<C>
impl<C: Default + CurveGroup> Default for AuthenticatedDensePoly<C>
Source§fn default() -> AuthenticatedDensePoly<C>
fn default() -> AuthenticatedDensePoly<C>
Source§impl<C: CurveGroup> Div<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
Authenticated division, i.e. division in which the divisor is a secret
shared polynomial
impl<C: CurveGroup> Div<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
Authenticated division, i.e. division in which the divisor is a secret shared polynomial
We follow the approach of: https://iacr.org/archive/pkc2006/39580045/39580045.pdf (Section 4)
To see why this method holds, consider the rev
operation for a polynomial
a(x): rev(a) = x^deg(a) * a(1/x)
Note that this operation is equivalent to reversing the coefficients of a(x)
For f(x) / g(x) where deg(f) = n, deg(g) = m, the objective of a division
with remainder algorithm is to solve:
f(x) = g(x)q(x) + r(x)
for q(x), r(x) uniquely where deg(r) < deg(g).
We could solve for q(x) easily if:
1. We could “mod out” r(x) and
2. If g^{-1}(x) exists
The rev operator provides a transformation that makes both of these true:
rev(f) = rev(g) * rev(q) + x^{n - m + 1} * rev(r)
Again, we have used the rev
operator to reverse the coefficients of each
polynomial so that the leading coefficients are those of r(x). Now we can
“mod out” the highest terms to get:
rev(f) = rev(g) * rev(q) mod x^{n - m + 1}
And now that we are working in the quotient ring F[x] / (x^{n - m + 1}), we
can be sure that rev(g)^{-1}(x) exists if its lowest degree coefficient
(constant coefficient) is non-zero. For random (blinded) polynomials, this
is true with probability 1 - 1/p.
So we:
1. apply the rev
transformation,
2. mod out rev{r} and solve for rev(q)
3. undo the rev
transformation to get q(x)
4. solve for r(x) = f(x) - q(x)g(x), though for floor division we skip
this step
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<'a, C: CurveGroup> Div<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Div<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<C: CurveGroup> Div<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
Given a public divisor b(x) and shared dividend a(x) = a_1(x) + a_2(x) for
party shares a_1, a_2 We can divide each share locally to obtain a secret
sharing of \floor{a(x) / b(x)}
impl<C: CurveGroup> Div<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
Given a public divisor b(x) and shared dividend a(x) = a_1(x) + a_2(x) for party shares a_1, a_2 We can divide each share locally to obtain a secret sharing of \floor{a(x) / b(x)}
To see this, consider that a_1(x) = q_1(x)b(x) + r_1(x) and a_2(x) = q_2(x)b(x) + r_2(x) where: - deg(q_1) = deg(a_1) - deg(b) - deg(q_2) = deg(a_2) - deg(b) - deg(r_1) < deg(b) - deg(r_2) < deg(b) The floor division operator for a(x), b(x) returns q(x) such that there exists r(x): deg(r) < deg(b) where a(x) = q(x)b(x) + r(x) Note that a_1(x) + a_2(x) = (q_1(x) + q_2(x))b(x) + r_1(x) + r_2(x), where of course deg(r_1 + r_2) < deg(b), so \floor{a(x) / b(x)} = q_1(x) + q_2(x); making q_1, q_2 additive secret shares of the result as desired
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<'a, C: CurveGroup> Div<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Div<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<'a, C: CurveGroup> Div<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Div<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<'a, C: CurveGroup> Div<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Div<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<C: CurveGroup> Div<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Div<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<C: CurveGroup> Div for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Div for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
/
operator.Source§impl<C: CurveGroup> Mul<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a AuthenticatedScalarResult<C>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a AuthenticatedScalarResult<C>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a ScalarResult<C>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a ScalarResult<C>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a Scalar<C>
lhs borrowed, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for &'a Scalar<C>
lhs borrowed, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for AuthenticatedScalarResult<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for AuthenticatedScalarResult<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for ScalarResult<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for ScalarResult<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for Scalar<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedDensePoly<C>> for Scalar<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<&AuthenticatedScalarResult<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&AuthenticatedScalarResult<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a AuthenticatedScalarResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a AuthenticatedScalarResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§fn mul(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
fn mul(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
*
operation. Read moreSource§impl<C: CurveGroup> Mul<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&DensePolynomialResult<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<&ResultHandle<C, Scalar<C>>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&ResultHandle<C, Scalar<C>>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<&'a ResultHandle<C, Scalar<C>>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a ResultHandle<C, Scalar<C>>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<&Scalar<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Mul<&Scalar<C>> for &AuthenticatedDensePoly<C>
Source§impl<'a, C: CurveGroup> Mul<&'a Scalar<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Mul<&'a Scalar<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a AuthenticatedScalarResult<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a AuthenticatedScalarResult<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a DensePolynomialResult<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a ScalarResult<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a ScalarResult<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a Scalar<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for &'a Scalar<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for AuthenticatedScalarResult<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for AuthenticatedScalarResult<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for DensePolynomialResult<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for ScalarResult<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for ScalarResult<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for Scalar<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<AuthenticatedDensePoly<C>> for Scalar<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<AuthenticatedScalarResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<AuthenticatedScalarResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<AuthenticatedScalarResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<AuthenticatedScalarResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<DensePolynomialResult<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<DensePolynomialResult<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<ResultHandle<C, Scalar<C>>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<ResultHandle<C, Scalar<C>>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<C: CurveGroup> Mul<ResultHandle<C, Scalar<C>>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<ResultHandle<C, Scalar<C>>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
*
operator.Source§impl<'a, C: CurveGroup> Mul<Scalar<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Mul<Scalar<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§impl<C: CurveGroup> Mul<Scalar<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Mul<Scalar<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§impl<C: CurveGroup> Neg for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Neg for &AuthenticatedDensePoly<C>
Source§impl<C: CurveGroup> Neg for AuthenticatedDensePoly<C>
impl<C: CurveGroup> Neg for AuthenticatedDensePoly<C>
Source§impl<C: CurveGroup> Sub<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Sub<&AuthenticatedDensePoly<C>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§impl<'a, C: CurveGroup> Sub<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Sub<&'a AuthenticatedDensePoly<C>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§impl<C: CurveGroup> Sub<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
impl<C: CurveGroup> Sub<&DensePolynomial<<C as Group>::ScalarField>> for &AuthenticatedDensePoly<C>
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§fn sub(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
fn sub(self, rhs: &DensePolynomial<C::ScalarField>) -> Self::Output
-
operation. Read moreSource§impl<'a, C: CurveGroup> Sub<&'a DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
impl<'a, C: CurveGroup> Sub<&'a DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs borrowed
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§fn sub(self, rhs: &'a DensePolynomial<C::ScalarField>) -> Self::Output
fn sub(self, rhs: &'a DensePolynomial<C::ScalarField>) -> Self::Output
-
operation. Read moreSource§impl<'a, C: CurveGroup> Sub<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Sub<AuthenticatedDensePoly<C>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§impl<'a, C: CurveGroup> Sub<DensePolynomial<<C as Group>::ScalarField>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
impl<'a, C: CurveGroup> Sub<DensePolynomial<<C as Group>::ScalarField>> for &'a AuthenticatedDensePoly<C>
lhs borrowed, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§fn sub(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
fn sub(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
-
operation. Read moreSource§impl<C: CurveGroup> Sub<DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Sub<DensePolynomial<<C as Group>::ScalarField>> for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Source§fn sub(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
fn sub(self, rhs: DensePolynomial<C::ScalarField>) -> Self::Output
-
operation. Read moreSource§impl<C: CurveGroup> Sub for AuthenticatedDensePoly<C>
lhs owned, rhs owned
impl<C: CurveGroup> Sub for AuthenticatedDensePoly<C>
lhs owned, rhs owned
Source§type Output = AuthenticatedDensePoly<C>
type Output = AuthenticatedDensePoly<C>
-
operator.Auto Trait Implementations§
impl<C> Freeze for AuthenticatedDensePoly<C>
impl<C> !RefUnwindSafe for AuthenticatedDensePoly<C>
impl<C> Send for AuthenticatedDensePoly<C>
impl<C> Sync for AuthenticatedDensePoly<C>
impl<C> Unpin for AuthenticatedDensePoly<C>
impl<C> !UnwindSafe for AuthenticatedDensePoly<C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more