A concrete instantiation of the virtual class. More...
#include <PAlgebra.h>
Public Member Functions | |
| PAlgebraModDerived (const PAlgebra &zMStar, long r) | |
| PAlgebraModDerived (const PAlgebraModDerived &other) | |
| PAlgebraModDerived & | operator= (const PAlgebraModDerived &other) |
| virtual PAlgebraModBase * | clone () const |
| Returns a pointer to a "clone". | |
| virtual PA_tag | getTag () const |
| Returns the type tag: PA_GF2_tag or PA_zz_p_tag. | |
| virtual const PAlgebra & | getZMStar () const |
| Returns reference to underlying PAlgebra object. | |
| virtual const vector< ZZX > & | getFactorsOverZZ () const |
| Returns reference to the factorization of Phi_m(X) mod p^r, but as ZZX's. | |
| virtual long | getR () const |
| The value r. | |
| virtual long | getPPowR () const |
| The value p^r. | |
| virtual void | restoreContext () const |
| Restores the NTL context for p^r. | |
| virtual void | genMaskTable () const |
| Generates the "mask table" that is used to support rotations. More... | |
| const RXModulus & | getPhimXMod () const |
| Returns reference to an RXModulus representing Phi_m(X) (mod p^r) | |
| const vec_RX & | getFactors () const |
| Returns reference to the factors of Phim_m(X) modulo p^r. | |
| const vec_RX & | getCrtCoeffs () const |
| Returns the CRT coefficients: element i contains (prod_{j!=i} F_j)^{-1} mod F_i, where F_0 F_1 ... is the factorization of Phi_m(X) mod p^r. | |
| const vector< vector< RX > > & | getMaskTable () const |
| Returns ref to maskTable, which is used to implement rotations (in the EncryptedArray module). More... | |
Embedding in the plaintext slots and decoding back | |
In all the functions below, G must be irredicible mod p, and the order of G must divide the order of p modulo m (as returned by zMStar.getOrdP()). In addition, when r > 1, G must be the monomial X (RX(1, 1)) | |
| void | CRT_decompose (vector< RX > &crt, const RX &H) const |
| Returns a vector crt[] such that crt[i] = H mod Ft (with t = T[i]) | |
| void | CRT_reconstruct (RX &H, vector< RX > &crt) const |
| Returns H in R[X]/Phi_m(X) s.t. for every i<nSlots and t=T[i], we have H == crt[i] (mod Ft) | |
| void | mapToSlots (MappingData< type > &mappingData, const RX &G) const |
| Compute the maps for all the slots. In the current implementation, we if r > 1, then we must have either deg(G) == 1 or G == factors[0]. | |
| void | embedInAllSlots (RX &H, const RX &alpha, const MappingData< type > &mappingData) const |
| Returns H in R[X]/Phi_m(X) s.t. for every t in T, the element Ht = (H mod Ft) in R[X]/Ft(X) represents the same element as alpha in R[X]/G(X). More... | |
| void | embedInSlots (RX &H, const vector< RX > &alphas, const MappingData< type > &mappingData) const |
| Returns H in R[X]/Phi_m(X) s.t. for every t in T, the element Ht = (H mod Ft) in R[X]/Ft(X) represents the same element as alphas[i] in R[X]/G(X). More... | |
| void | decodePlaintext (vector< RX > &alphas, const RX &ptxt, const MappingData< type > &mappingData) const |
| Return an array such that alphas[i] in R[X]/G(X) represent the same element as rt = (H mod Ft) in R[X]/Ft(X) where t=T[i]. More... | |
| void | buildLinPolyCoeffs (vector< RX > &C, const vector< RX > &L, const MappingData< type > &mappingData) const |
| Returns a coefficient vector C for the linearized polynomial representing M. More... | |
A concrete instantiation of the virtual class.
| void PAlgebraModDerived< type >::buildLinPolyCoeffs | ( | vector< RX > & | C, |
| const vector< RX > & | L, | ||
| const MappingData< type > & | mappingData | ||
| ) | const |
Returns a coefficient vector C for the linearized polynomial representing M.
For h in Z/(p^r)[X] of degree < d,
G is assumed to be defined in mappingData, with d = deg(G). L describes a linear map M by describing its action on the standard power basis: M(x^j mod G) = (L[j] mod G), for j = 0..d-1.
| void PAlgebraModDerived< type >::decodePlaintext | ( | vector< RX > & | alphas, |
| const RX & | ptxt, | ||
| const MappingData< type > & | mappingData | ||
| ) | const |
Return an array such that alphas[i] in R[X]/G(X) represent the same element as rt = (H mod Ft) in R[X]/Ft(X) where t=T[i].
The mappingData argument should contain the output of mapToSlots(G).
| void PAlgebraModDerived< type >::embedInAllSlots | ( | RX & | H, |
| const RX & | alpha, | ||
| const MappingData< type > & | mappingData | ||
| ) | const |
Returns H in R[X]/Phi_m(X) s.t. for every t in T, the element Ht = (H mod Ft) in R[X]/Ft(X) represents the same element as alpha in R[X]/G(X).
Must have deg(alpha)<deg(G). The mappingData argument should contain the output of mapToSlots(G).
| void PAlgebraModDerived< type >::embedInSlots | ( | RX & | H, |
| const vector< RX > & | alphas, | ||
| const MappingData< type > & | mappingData | ||
| ) | const |
Returns H in R[X]/Phi_m(X) s.t. for every t in T, the element Ht = (H mod Ft) in R[X]/Ft(X) represents the same element as alphas[i] in R[X]/G(X).
Must have deg(alpha[i])<deg(G). The mappingData argument should contain the output of mapToSlots(G).
|
virtual |
Generates the "mask table" that is used to support rotations.
maskTable[i][j] is a polynomial representation of a mask that is 1 in all slots whose i'th coordinate is at least j, and 0 elsewhere. We have:
maskTable.size() == zMStar.numOfGens() // # of generators
for i = 0..maskTable.size()-1:
maskTable[i].size() == zMStar.OrderOf(i) // order of generator i
Implements PAlgebraModBase.
|
inline |
Returns ref to maskTable, which is used to implement rotations (in the EncryptedArray module).
maskTable[i][j] is a polynomial representation of a mask that is 1 in all slots whose i'th coordinate is at least j, and 0 elsewhere. We have:
maskTable.size() == zMStar.numOfGens() // # of generators
for i = 0..maskTable.size()-1:
maskTable[i].size() == zMStar.OrderOf(i) // order of generator i
1.8.3.1