Skip to content

Commit

Permalink
prevent mult of degree-varying cts in polynomial evaluator
Browse files Browse the repository at this point in the history
  • Loading branch information
qantik committed Jun 12, 2024
1 parent 355afc4 commit 9010ab2
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions he/polynomial_evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,16 @@ func EvaluatePolynomialVectorFromPowerBasis[T any](eval Evaluator, targetLevel i
// Loops starting from the highest degree coefficient
for key := pol.Value[0].Degree(); key > 0; key-- {
if !(even || odd) || (key&1 == 0 && even) || (key&1 == 1 && odd) {
// prevent multiplication of operands with differing degrees
if res.Degree() > X[key].Degree() {
if err = eval.Relinearize(res, res); err != nil {
return nil, fmt.Errorf("unable to relinearize ciphertext: %w", err)
}
} else if X[key].Degree() > res.Degree() {
if err = eval.Relinearize(X[key], X[key]); err != nil {
return nil, fmt.Errorf("unable to relinearize ciphertext: %w", err)
}
}
if err = eval.MulThenAdd(X[key], cg.GetVectorCoefficient(pol, key), res); err != nil {
return
}
Expand Down Expand Up @@ -350,6 +360,16 @@ func EvaluatePolynomialVectorFromPowerBasis[T any](eval Evaluator, targetLevel i

for key := pol.Value[0].Degree(); key > 0; key-- {
if key != 0 && (!(even || odd) || (key&1 == 0 && even) || (key&1 == 1 && odd)) {
// prevent multiplication of operands with differing degrees
if res.Degree() > X[key].Degree() {
if err = eval.Relinearize(res, res); err != nil {
return nil, fmt.Errorf("unable to relinearize ciphertext: %w", err)
}
} else if X[key].Degree() > res.Degree() {
if err = eval.Relinearize(X[key], X[key]); err != nil {
return nil, fmt.Errorf("unable to relinearize ciphertext: %w", err)
}
}
// MulScalarAndAdd automatically scales c to match the scale of res.
if err = eval.MulThenAdd(X[key], cg.GetSingleCoefficient(pol.Value[0], key), res); err != nil {
return
Expand Down

0 comments on commit 9010ab2

Please sign in to comment.