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