❗ 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:
-
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
-
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
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()
function has to be called at the end of each program to clear the memory used.
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
x
to aGEN
variable.Arguments:
x(int)
- Class Data:
- n, Q, sigma (ints)
- q, t, F (pari_GEN)
-
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
-
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
- Class Data:
- sk (
secret_key
) - pk (
public_key
)
- sk (
-
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
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
int
variable, or it is anint_list
variable. 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_GEN
variable.Arguments:
sk (secret_key*)