def base_polynomial(self, p, scalar=1): # returns a Polynomial P (of degree p + 1) such that P(x) == scalar * sum(i^p for i in range(1, x + 1)) if p + 1 > self._max_degree: raise ValueError # compute p(x) = sum(i^p for i in range(1, n + 1)) coef = list(repeat(0, p + 2)) for i in range(p + 1): coef[p + 1 - i] = self.mult(self._choose.choose(p + 1, i), self._bn[i]) poly = Polynomial(coef, modulus=self._modulus, primitive_root=self._primitive_root) poly.scalarmult(self.div(scalar, p + 1)) return poly