PyBV
PyBV copied to clipboard
DEPRECATED- see https://github.com/OpenMined/OpenMined or https://github.com/OpenMined/PySyft
PyBV
❗ This library has been deprecated due to changes in strategy and roadmap. To actively contribute based on our current roadmap, checkout OpenMined, PySyft, or join our slack
A Python Implementation of the BV Homomorphic Encryption Scheme
The scheme was proposed by Lauter et al. in Can Homomorphic Encryption be Practical? which was a variant of a homomorphic encryption scheme given by Brakerski et al. in Fully Homomorphic Encryption from Ring-LWE and Security for Key Dependent Messages.
The API can be imported using the command "import BV". It currently supports the following functions and classes:
Running
-
Install Docker
- If you're on macOS and use Homebrew, run
brew cask install docker; open -a docker
- If you're on macOS and use Homebrew, run
-
Run these commands:
make build
make run
Development
-
Install Docker
- If you're on macOS and use Homebrew, run
brew cask install docker; open -a docker
- If you're on macOS and use Homebrew, run
-
Run
make build -
Edit source code as you wish
-
Run
make dev
API
Functions:
pari_init(pari_size, max_prime)
pari_init() is the function that needs to be called before dealing with this API. On importing the module, the module executes this statement automatically. pari_size defines the size of stack we'll be using, and max_prime defines the pre-computed prime table. By default, pari_size is set to 2000000000, and max_prime is set to 2.
Arguments: pari_size (int), max_prime (int)
pari_close()
pari_close() function has to be called at the end of each program to clear the memory used.
Classes:
pari_GEN
This class abstracts the GEN variable in C++, making it available through a Python interface. The class is compatible with +, *, /, -, __getitem__ , %, and print.
-
Class Data:
- value (
GEN)
- value (
-
__init__(self, x)The constructor converts
xto aGENvariable.Arguments:
x(int)
parameters
- Class Data:
- n, Q, sigma (ints)
- q, t, F (pari_GEN)
secret_key
-
Class Data:
- sk (
pari_GEN) - params (
parameters)
- sk (
-
__init__(self, sk = None, parmas = None)The constructor initiates class data.Arguments:
sk (pari_GEN),params (parameters) -
decrypt(self, ct)
decrypt()method returns the plaintext (pari_GEN) encrypted in ciphertext ct.Arguments:
ct (pari_GEN) -
serialize(self)
TO BE IMPLEMENTED
public_key
-
Class Data:
- pk (
pari_GEN) - params (
parameters*)
- pk (
-
__init__(self, pk = None, params = None)
The constructor initiates the class data.Arguments:
pk (pari_GEN),params (parameters*) -
encrypt(self, pt)
encrypt()method returns the ciphertext (pari_GEN) which encrypts plaintext pt.Arguments:
pt (pari_GEN) -
serialize(self)
TO BE IMPLEMENTED
key_pair
- Class Data:
- sk (
secret_key) - pk (
public_key)
- sk (
key_gen
-
generate_key(self, n, Q, T, sigma)generate_key()method returns the keys, which is of typekey_pair.Arguments:
n (int),Q (int),T (int),sigma (int) -
deserialize(self)
TO BE IMPLEMENTED
ciphertext
The class is compatible with '+', '*', and '-' operators. It also supports multiplication with plaintext (int) and batching.
-
Class Data:
- value (
pari_GEN) - pk (
public_key*)
- value (
-
__init__(self, plaintext = None, pk)The plaintext variable is either an
intvariable, or it is anint_listvariable. The size of list has to be less than the degree of polynomials(paramter n)in the polynomial ring.Arguments:
plaintext (int or int_list), pk (public_key*) -
decrypt(self, sk)decrypt()method returns the decrypted ciphertext which ispari_GENvariable.Arguments:
sk (secret_key*)