Welcome to Pyfhel’s documentation!¶
-
class
Pyfhel.
Pyfhel
¶ Bases:
object
PYFHEL, PYthon For Homomorphic Encryption Libraries.
Encrypted addition, multiplication, substraction, exponentiation of integers/doubles. Implementation of homomorphic encryption using SEAL/PALISADE/HELIB as backend. Pyfhel works with PyPtxt as plaintext class and PyCtxt as cyphertext class.
Example: >>> he = Pyfhel() >>> he.ContextGen(p=65537) >>> he.KeyGen(p=65537) >>> p1 = he.encode(4) >>> p2 = he.encode(2) >>> c1 = he.encrypt(p1) >>> c2 = he.encrypt(p2) >>> c1 = c1 + c2 >>> p_res = he.decrypt(c1) 6
-
add
(PyCtxt ctxt, PyCtxt ctxt_other, bool in_new_ctxt=False)¶ Sum two PyCtxt ciphertexts.
Sums two ciphertexts. Encoding must be the same. Requires same context and encryption with same public key. The result is applied to the first ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext whose values are added with ctxt_other.
- ctxt_other (PyCtxt): ciphertext left untouched.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
add_plain
(PyCtxt ctxt, PyPtxt ptxt, bool in_new_ctxt=False)¶ Sum a PyCtxt ciphertext and a PyPtxt plaintext.
Sums a ciphertext and a plaintext. Encoding must be the same. Requiressame context and encryption with same public key. The result is applied to the first ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext whose values are added with ptxt.
- ptxt (PyPtxt): plaintext left untouched.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
batchEnabled
(self)¶ Flag of batch enabled.
- Return:
- bool: Result, True if enabled, False if disabled.
-
contextGen
(long p, long m=2048, bool flagBatching=False, long base=2, long sec=128, int intDigits=64, int fracDigits = 32)¶ Generates Homomorphic Encryption context based on parameters.
Creates a HE context based in parameters, as well as integer, fractional and batch encoders. The HE context is required for any other function (encryption/decryption,encoding/decoding, operations)
Batch encoding is available if p is prime and p-1 is multiple of 2*m
Some tips:
- m-> Higher allows more encrypted operations. In batch mode it
- is the number of integers per ciphertext.
- base-> Affects size of plaintexts and ciphertexts, and FRACTIONAL
- encoding. See encryptFrac.
- intDigits & fracDigits-> applicable with FRACTIONAL encoding,
- out of ‘m’
- Args:
- p (long): Plaintext modulus. All operations are modulo p.
- m (long=2048): Coefficient modulus.
- flagBatching (bool=false): Set to true to enable batching.
- base (long=2): Polynomial base.
- sec (long=128): Security level equivalent in AES. 128 or 192.
- intDigits (int=64): truncated positions for integer part.
- fracDigits (int=32): truncated positions for fractional part.
- Return:
- None
-
decode
(PyPtxt ptxt)¶ Decodes any valid PyPtxt into a value or vector.
Decodes a PyPtxt plaintext based on the current context. Outputs an integer (int), a truncated decimal (float), or in Batch mode a 1D vector of integers. Automatically selects the decoding function based on type.
- Args:
- ptxt (PyPtxt|int|double|np_1d_int_array): plaintext to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- int|double|vector[int]: the decoded value or vector;
- Raise:
- TypeError: if the plaintext doesn’t have a valid type.
-
decodeArray
(PyPtxt ptxt)¶ Decodes a PyPtxt plaintext into a 1D numpy numpy of integers.
Decodes a PyPtxt plaintext into a 1D numpy array of integers based on the current context. PyPtxt encoding must be BATCH.
- Args:
- ptxt (PyPtxt): plaintext to decode.
- Return:
- vector[int64_t]: the vectort containing the decoded values
- Raise:
- RuntimeError: if the plaintext encoding isn’t ENCODING_T.BATCH.
-
decodeBatch
(PyPtxt ptxt)¶ Decodes a PyPtxt plaintext into a 1D vector of integers.
Decodes a PyPtxt plaintext into a 1D vector of integers based on the current context. PyPtxt encoding must be BATCH.
- Args:
- ptxt (PyPtxt): plaintext to decode.
- Return:
- vector[int64_t]: the vectort containing the decoded values
- Raise:
- RuntimeError: if the plaintext encoding isn’t ENCODING_T.BATCH.
-
decodeFrac
(PyPtxt ptxt)¶ Decodes a PyPtxt plaintext into a single float value.
Decodes a PyPtxt plaintext into a single float value based on the current context. PyPtxt encoding must be FRACTIONAL.
- Args:
- ptxt (PyPtxt): plaintext to decode.
- Return:
- double: the decoded float value
- Raise:
- RuntimeError: if the ciphertext encoding isn’t ENCODING_T.FRACTIONAL.
-
decodeInt
(PyPtxt ptxt)¶ Decodes a PyPtxt plaintext into a single int value.
Decodes a PyPtxt plaintext into a single int value based on the current context. PyPtxt encoding must be INTEGER.
- Args:
- ptxt (PyPtxt=None): plaintext to decode.
- Return:
- int64_t: the decoded integer value
- Raise:
- RuntimeError: if the ciphertext encoding isn’t ENCODING_T.INTEGER.
-
decrypt
(PyCtxt ctxt, bool decode_value=False, PyPtxt ptxt=None)¶ Decrypts any valid PyCtxt into either a PyPtxt ciphertext or a value.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. Outputs an integer (int), a truncated decimal (float), a PyPtxt encoded plaintext, or in Batch mode a 1D numpy vector of integers. Can also return a PyPtxt by setting decode_value to True.
Selects the encryption function based on type.
If provided a plaintext, decrypts the ciphertext inside it.
- Args:
- ctxt (PyCtxt|int|double|np_1d_int_array): plaintext to encrypt.
- decode_value (bool=False): return value or return ptxt.
- ptxt (PyPtxt=None): Optional destination ciphertext.
- Return:
- PyPtxt|int|double|vector[int]: the decrypted result
- Raise:
- TypeError: if the plaintext doesn’t have a valid type.
-
decryptArray
(PyCtxt ctxt)¶ Decrypts a PyCtxt ciphertext into a 1D numpy vector of integers.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. If provided an output vector, decrypts the ciphertext inside it.
- Args:
- ctxt (PyCtxt): ciphertext to decrypt.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
- Raise:
- RuntimeError: if the ciphertext encoding isn’t ENCODING_T.BATCH.
-
decryptBatch
(PyCtxt ctxt)¶ Decrypts a PyCtxt ciphertext into a 1D numpy vector of integers.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. If provided an output vector, decrypts the ciphertext inside it.
- Args:
- ctxt (PyCtxt): ciphertext to decrypt.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
- Raise:
- RuntimeError: if the ciphertext encoding isn’t ENCODING_T.BATCH.
-
decryptFrac
(PyCtxt ctxt)¶ Decrypts a PyCtxt ciphertext into a single float value.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. PyCtxt encoding must be FRACTIONAL.
- Args:
- ctxt (PyCtxt): ciphertext to decrypt.
- Return:
- float: the decrypted float value
- Raise:
- RuntimeError: if the ctxt encoding isn’t ENCODING_T.FRACTIONAL.
-
decryptInt
(PyCtxt ctxt)¶ Decrypts a PyCtxt ciphertext into a single int value.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. PyCtxt encoding must be INTEGER.
- Args:
- ctxt (PyCtxt=None): ciphertext to decrypt.
- Return:
- int: the decrypted integer value
- Raise:
- RuntimeError: if the ctxt encoding isn’t ENCODING_T.INTEGER.
-
decryptPtxt
(PyCtxt ctxt, PyPtxt ptxt=None)¶ Decrypts a PyCtxt ciphertext into a PyPtxt plaintext.
Decrypts a PyCtxt ciphertext using the current secret key, based on the current context. No regard to encoding (decode PyPtxt to obtain value).
- Args:
- ctxt (PyCtxt): ciphertext to decrypt.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the decrypted plaintext
-
encode
(val_vec not None, PyPtxt ptxt=None)¶ Encodes any valid value/vector into a PyPtxt plaintext.
Encodes any valid value/vector based on the current context. Value/Vector must be an integer (int), a decimal that will get truncated (float), or in Batch mode a 1D vector of integers.
If provided a plaintext, encodes the vector inside it.
- Args:
- val_vec (int|float|vector[int64_t]): value/vector to encode.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the plaintext containing the encoded vector.
- Raise:
- TypeError: if the val_vec doesn’t have a valid type.
-
encodeArray
(int64_t[::1] &arr, PyPtxt ptxt=None)¶ Encodes a 1D numpy array of integers into a PyPtxt plaintext.
Encodes a 1D numpy vector of integers based on the current context. Plaintext must be a 1D vector of integers. Requires batch mode. In Numpy the vector needs to be in ‘contiguous’ or ‘c’ mode. If provided a plaintext, encodes the vector inside it. Maximum size of the vector defined by parameter ‘m’ from context.
- Args:
- vec (vector[int64_t]): vector to encode.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the plaintext containing the encoded vector.
-
encodeBatch
(vector[int64_t]& vec, PyPtxt ptxt=None)¶ Encodes a 1D list of integers into a PyPtxt plaintext.
Encodes a 1D vector of integers based on the current context. Plaintext must be a 1D vector of integers. Requires batch mode. In Numpy the vector needs to be in ‘contiguous’ or ‘c’ mode. If provided a plaintext, encodes the vector inside it. Maximum size of the vector defined by parameter ‘m’ from context.
- Args:
- vec (vector[int64_t]): vector to encode.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the plaintext containing the encoded vector.
-
encodeFrac
(double &value, PyPtxt ptxt=None)¶ Encodes a single float value into a PyPtxt plaintext.
Encodes a single float value based on the current context. If provided a plaintext, encodes the value inside it.
- Args:
- value (float): value to encrypt.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the plaintext containing the encoded value
-
encodeInt
(int64_t &value, PyPtxt ptxt=None)¶ Encodes a single int value into a PyPtxt plaintext.
Encodes a single intvalue based on the current context. If provided a plaintext, encodes the value inside it.
- Args:
- value (int): value to encrypt.
- ptxt (PyPtxt=None): Optional destination plaintext.
- Return:
- PyPtxt: the plaintext containing the encoded value
-
encrypt
(ptxt not None, PyCtxt ctxt=None)¶ Encrypts any valid plaintext into a PyCtxt ciphertext.
Encrypts a plaintext using the current secret key, based on the current context. Plaintext must be an integer (int), a decimal that will get truncated (double), a PyPtxt encoded plaintext, or in Batch mode a 1D numpy vector of integers. Selects the encryption function based on type.
If provided a ciphertext, encrypts the plaintext inside it.
- Args:
- ptxt (PyPtxt|int|double|np_1d_int_array): plaintext to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
- Raise:
- TypeError: if the plaintext doesn’t have a valid type.
-
encryptArray
(int64_t[::1] arr, PyCtxt ctxt=None)¶ Encrypts a 1D numpy array of integers into a PyCtxt ciphertext.
Encrypts a 1D numpy array of integers using the current secret key, based on the current context. Plaintext must be a 1D numpy vector of integers. Requires batch mode. The vector needs to be in ‘contiguous’ or ‘c’ mode. If provided a ciphertext, encrypts the plaintext inside it.
- Args:
- ptxt (np.ndarray[int, ndim=1, mode=”c”]): plaintext to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
-
encryptBatch
(vector[int64_t] vec, PyCtxt ctxt=None)¶ Encrypts a 1D vector of integers into a PyCtxt ciphertext.
Encrypts a 1D vector of integers using the current secret key, based on the current context. Plaintext must be a 1D numpy vector of integers. Requires batch mode. The vector needs to be in ‘contiguous’ or ‘c’ mode. If provided a ciphertext, encrypts the plaintext inside it.
- Args:
- ptxt (np.ndarray[int, ndim=1, mode=”c”]): plaintext to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
-
encryptFrac
(double value, PyCtxt ctxt=None)¶ Encrypts a single float value into a PyCtxt ciphertext.
Encrypts a single value using the current secret key, based on the current context. Value must a decimal (float, double) that will get truncated both in the integer part (base^intDigits) and in the decimal part (base^fracDigits). If provided a ciphertext, encrypts the plaintext inside it.
- Args:
- value (float): value to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
-
encryptInt
(int64_t value, PyCtxt ctxt=None)¶ Encrypts a single int value into a PyCtxt ciphertext.
Encrypts a single value using the current public key, based on the current context. Value must either be an integer (int64_t) If provided a ciphertext, encrypts the value inside it.
- Args:
- value (int): value to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
-
encryptPtxt
(PyPtxt ptxt, PyCtxt ctxt=None)¶ Encrypts an encoded PyPtxt plaintext into a PyCtxt ciphertext.
Encrypts an encoded PyPtxt plaintext using the current secret key, based on the current context. Plaintext must be a PyPtxt. If provided a ciphertext, encrypts the plaintext inside it.
- Args:
- ptxt (PyPtxt): plaintext to encrypt.
- ctxt (PyCtxt=None): Optional destination ciphertext.
- Return:
- PyCtxt: the ciphertext containing the encrypted plaintext
- Raise:
- TypeError: if the plaintext doesn’t have a valid type.
-
getbase
()¶ Polynomial base.
Polynomial base of polynomials that conform cyphertexts and plaintexts.Affects size of plaintexts and ciphertexts, and FRACTIONAL encoding. See encryptFrac.
- Return:
- int: Polynomial base.
-
getflagBatch
()¶ Flag for BATCH encoding mode.
If True, allows operations over vectors encrypted in single PyCtxt ciphertexts. Defined in context creation based on the chosen values of p and m, and activated in context creation with a flag.
- Return:
- bool: flag for enabled BATCH encoding and operating.
-
getfracDigits
()¶ Decimal digits in FRACTIONAL encoding.
When encrypting/encoding double (FRACTIONAL encoding), truncated positions dedicated to deimal part, out of ‘m’ positions.
- Return:
- int: number of fractional digits.
-
getintDigits
()¶ Integer digits in FRACTIONAL encoding.
When encrypting/encoding double (FRACTIONAL encoding), truncated positions dedicated to integer part, out of ‘m’ positions.
- Return:
- int: number of integer digits.
-
getm
()¶ Plaintext coefficient of the current context.
The more, the bigger the ciphertexts are, thus allowing for more operations with correct decryption. Also, number of values in a ciphertext in BATCH encoding mode.
- Return:
- int: Plaintext coefficient.
-
getnSlots
()¶ Maximum umber of slots fitting in a ciphertext in BATCH mode.
- Return:
- int: Maximum umber of slots.
-
getp
()¶ Plaintext modulus of the current context.
All operations are modulo p.
- Return:
- int: Plaintext modulus.
-
getsec
()¶ Security level equivalent in AES.
- Return:
- int: Security level equivalent in AES. Either 128 or 192.
-
keyGen
()¶ Generates a pair of secret/Public Keys.
Based on the current context, initializes a public/secret key pair.
- Args:
- None
- Return:
- None
-
multiply
(PyCtxt ctxt, PyCtxt ctxt_other, bool in_new_ctxt=False)¶ Multiply first PyCtxt ciphertext by the second PyCtxt ciphertext.
Multiplies two ciphertexts. Encoding must be the same. Requires same context and encryption with same public key. The result is applied to the first ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext multiplied with ctxt_other.
- ctxt_other (PyCtxt): ciphertext left untouched.
- in_new_ctxt (bool=False): result in a newly created ciphertext.
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
multiply_plain
(PyCtxt ctxt, PyPtxt ptxt, bool in_new_ctxt=False)¶ Multiply a PyCtxt ciphertext and a PyPtxt plaintext.
Multiplies a ciphertext and a plaintext. Encoding must be the same. Requires same context and encryption with same public key. The result is applied to the first ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext whose values are multiplied with ptxt.
- ptxt (PyPtxt): plaintext left untouched.
- Return:
- PyCtxt resulting ciphertext, either the input transformed or a new one
-
negate
(PyCtxt ctxt, bool in_new_ctxt=False)¶ Negate PyCtxt ciphertext value/s.
- Args:
- ctxt (PyCtxt): ciphertext whose values are negated.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
noiseLevel
(PyCtxt ctxt)¶ Computes the invariant noise budget (bits) of a PyCtxt ciphertext.
The invariant noise budget measures the amount of room there is for thenoise to grow while ensuring correct decryptions. Decrypts a PyCtxt ciphertext using the current secret key, based on the current context.
- Args:
- ctxt (PyCtxt): ciphertext to be measured.
- Return:
- int: the noise budget level
-
polyEval
(PyCtxt ctxt, vector[int64_t] coeffPoly, bool in_new_ctxt=False)¶ Evaluates polynomial in PyCtxt ciphertext value/s.
Evaluates a polynomial given by integer coefficients. Requires previously initialized relinearization keys with relinearizeKeyGen(), since it applies relinearization after each multiplication.
- Polynomial coefficients are in the form:
- coeffPoly[0]*ctxt^2 + coeffPoly[1]*ctxt + coeffPoly[2]
- Args:
- ctxt (PyCtxt): ciphertext whose value/s are exponetiated.
- coeffPoly (vector[int64_t]): Polynomial coefficients
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
polyEval_double
(PyCtxt ctxt, vector[double] coeffPoly, bool in_new_ctxt=False)¶ Evaluates polynomial in PyCtxt ciphertext value/s.
Evaluates a polynomial given by float coefficients. Requires previously initialized relinearization keys with relinearizeKeyGen(), since it applies relinearization after each multiplication.
- Polynomial coefficients are in the form:
- coeffPoly[0]*ctxt^2 + coeffPoly[1]*ctxt + coeffPoly[2]
- Args:
- ctxt (PyCtxt): ciphertext whose value/s are exponetiated.
- coeffPoly (vector[float]): Polynomial coefficients.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
power
(PyCtxt ctxt, uint64_t expon, bool in_new_ctxt=False)¶ Exponentiates PyCtxt ciphertext value/s to expon power.
Performs an exponentiation over a cyphertext. Requires previously initialized relinearization keys with relinearizeKeyGen(), since it applies relinearization after each multiplication.
- Args:
- ctxt (PyCtxt): ciphertext whose value/s are exponetiated.
- expon (uint64_t): exponent.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
relinBitCount
(self)¶ Relinearization bit count for current evaluation keys.
- Return:
- long: [1-60], based on relinKeyGen parameter.
-
relinKeyGen
(int bitCount, int size)¶ Generates a relinearization Key.
Generates a relinearization Key, used to reduce size of the ciphertexts when multiplying or exponentiating them. This is needed due to the fact that ciphertexts grow in size after encrypted mults/exponentiations.
Based on the current context, initializes one relinearization key.
- Args:
- bitCount (int): Bigger means faster but noisier (will require
- relinearization). Needs to be within [1, 60]
- Return:
- None
-
relinearize
(PyCtxt ctxt)¶ Relinearizes a ciphertext.
Relinearizes a ciphertext. This functions relinearizes ctxt, reducing its size down to 2. If the size of encrypted is K+1, the given evaluation keys need to have size at least K-1.
To relinearize a ciphertext of size M >= 2 back to size 2, we actually need M-2 evaluation keys. Attempting to relinearize a too large ciphertext with too few evaluation keys will result in an exception being thrown.
- Args:
- bitCount (int): The bigger the faster but noisier (will require
- relinearization). Needs to be within [1, 60]
- Return:
- None
-
restoreContext
(string fileName)¶ Restores current context from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
restorepublicKey
(string fileName)¶ Restores current public key from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
restorerelinKey
(string fileName)¶ Restores current relinearization keys from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
restorerotateKey
(string fileName)¶ Restores current rotation Keys from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
restoresecretKey
(string fileName)¶ Restores current secret key from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
rotate
(PyCtxt ctxt, int k, bool in_new_ctxt=False)¶ Rotates cyclically PyCtxt ciphertext values k positions.
Performs a cyclic rotation over a cyphertext encoded in BATCH mode. Requires previously initialized rotation keys with rotateKeyGen().
- Args:
- ctxt (PyCtxt): ciphertext whose values are rotated.
- k (int): number of positions to rotate.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
rotateKeyGen
(int bitCount)¶ Generates a rotation Key.
Generates a rotation Key, used in BATCH mode to rotate cyclically the values inside the encrypted vector.
Based on the current context, initializes one rotation key.
- Args:
- bitCount (int): Bigger means faster but noisier (will require
- relinearization). Needs to be within [1, 60]
- Return:
- None
-
saveContext
(string fileName)¶ Saves current context in a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
savepublicKey
(string fileName)¶ Saves current public key in a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
saverelinKey
(string fileName)¶ Saves current relinearization keys in a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
saverotateKey
(string fileName)¶ Saves current rotation Keys from a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
savesecretKey
(string fileName)¶ Saves current secret key in a file
- Args:
- fileName (string): Name of the file.
- Return:
- bool: Result, True if OK, False otherwise.
-
square
(PyCtxt ctxt, bool in_new_ctxt=False)¶ Square PyCtxt ciphertext value/s.
- Args:
- ctxt (PyCtxt): ciphertext whose values are squared.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
sub
(PyCtxt ctxt, PyCtxt ctxt_other, bool in_new_ctxt=False)¶ ubstracts one PyCtxt ciphertext from another.
Substracts one ciphertext from another. Encoding must be the same. Requires same context and encryption with same public key. The result is stored/applied to the first ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext substracted by ctxt_other.
- ctxt_other (PyCtxt): ciphertext being substracted from ctxt.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
sub_plain
(PyCtxt ctxt, PyPtxt ptxt, bool in_new_ctxt=False)¶ Substracts a PyCtxt ciphertext and a plaintext.
Performs ctxt = ctxt - ptxt. Encoding must be the same. Requires same context and encryption with same public key. The result is stored/applied to the ciphertext.
- Args:
- ctxt (PyCtxt): ciphertext substracted by ptxt.
- ptxt (PyPtxt): plaintext substracted from ctxt.
- in_new_ctxt (bool=False): result in a newly created ciphertext
- Return:
- PyCtxt resulting ciphertext, the input transformed or a new one
-
-
class
Pyfhel.
PyCtxt
¶ Bases:
object
Ciphertext of Pyfhel. Contains a value/vector of encrypted ints/doubles.
This class references SEAL, PALISADE and HElib ciphertexts, using the one corresponding to the backend selected in Pyfhel. By default, it is SEAL.
- Attributes:
- other (PyCtxt, optional): Other PyCtxt to deep copy.
-
load
()¶ Load the ciphertext from a file.
- Args:
- fileName: (
str
) File where the ciphertext is retrieved from.
-
save
()¶ Save the ciphertext into a file.
- Args:
- fileName: (
str
) File where the ciphertext will be stored.
-
size
()¶ int: Actual size of the ciphertext.
-
size_capacity
()¶ int: Maximum size the ciphertext can hold.
-
class
Pyfhel.
PyPtxt
¶ Bases:
object
Plaintext of Pyfhel. Contains a value/vector of unencrypted ints/doubles.
This class references SEAL, PALISADE and HElib ciphertexts, using the one corresponding to the backend selected in Pyfhel (SEAL by default).
- Attributes:
- other_ptxt (PyPtxt, optional): Other PyPtxt to deep copy
-
is_zero
()¶ bool: Flag to quickly check if it is empty
-
load
()¶ Load the plaintext from a file.
- Args:
- fileName: (
str
) File where the plaintext is retrieved from.
-
save
()¶ Save the ciphertext into a file.
- Args:
- fileName: (
str
) File where the ciphertext will be stored.
-
to_string
()¶ string: Polynomial representation of the plaintext