コード例 #1
0
    def NOT(self, args, **kwargs):
        """
        Performs a logical NOT on one bit.
        IN: A
        """
        left_name = args
        left = self.program.get_variable_data(left_name)

        result = nufhe.empty_ciphertext(self.thr, self.program.key.params,
                                        left.shape)
        nufhe.gate_not(self.thr,
                       self.program.key,
                       result,
                       left,
                       perf_params=self.pp)
        self.program.set_variable_data('STATE', result)
コード例 #2
0
    def ORYN(self, args, **kwargs):
        """
        Performs a logical OrYN on two bits (A OR NOT(B))
        IN: A, B
        """
        left_name, right_name = args
        left = self.program.get_variable_data(left_name)
        right = self.program.get_variable_data(right_name)

        result = nufhe.empty_ciphertext(self.thr, self.program.key.params,
                                        left.shape)
        nufhe.gate_oryn(self.thr,
                        self.program.key,
                        result,
                        left,
                        right,
                        perf_params=self.pp)
        self.program.set_variable_data('STATE', result)
コード例 #3
0
    def ANDNY(self, args, **kwargs):
        """
        Performs a logical AndNY on two bits (NOT(A) AND B)
        IN: A, B
        """
        left_name, right_name = args
        left = self.program.get_variable_data(left_name)
        right = self.program.get_variable_data(right_name)

        result = nufhe.empty_ciphertext(self.thr, self.program.key.params,
                                        left.shape)
        nufhe.gate_andny(self.thr,
                         self.program.key,
                         result,
                         left,
                         right,
                         perf_params=self.pp)
        self.program.set_variable_data('STATE', result)
コード例 #4
0
    def XOR(self, args, **kwargs):
        """
        Performs a logical XOR on two bits.
        IN: A, B
        """
        left_name, right_name = args
        left = self.program.get_variable_data(left_name)
        right = self.program.get_variable_data(right_name)

        result = nufhe.empty_ciphertext(self.thr, self.program.key.params,
                                        left.shape)
        nufhe.gate_xor(self.thr,
                       self.program.key,
                       result,
                       left,
                       right,
                       perf_params=self.pp)
        self.program.set_variable_data('STATE', result)

        self._merkleize_computation(
            pickle.dumps((left.a.get(), left.b.get())),
            pickle.dumps((right.a.get(), right.b.get())),
            pickle.dumps((result.a.get(), result.b.get())))
コード例 #5
0
ファイル: gate_nand_low_level.py プロジェクト: xbee/nufhe
import random
import numpy
import nufhe
from reikna.cluda import any_api

size = 32
bits1 = [random.choice([False, True]) for i in range(size)]
bits2 = [random.choice([False, True]) for i in range(size)]
reference = [not (b1 and b2) for b1, b2 in zip(bits1, bits2)]

thr = any_api().Thread.create(interactive=True)

rng = nufhe.DeterministicRNG()
secret_key, cloud_key = nufhe.make_key_pair(thr, rng)

ciphertext1 = nufhe.encrypt(thr, rng, secret_key, bits1)
ciphertext2 = nufhe.encrypt(thr, rng, secret_key, bits2)

result = nufhe.empty_ciphertext(thr, cloud_key.params, ciphertext1.shape)
nufhe.gate_nand(thr, cloud_key, result, ciphertext1, ciphertext2)

result_bits = nufhe.decrypt(thr, secret_key, result)

assert all(result_bits == reference)

コード例 #6
0
import numpy
import nufhe
from reikna.cluda import any_api

thr = any_api().Thread.create(interactive=True)

rng = numpy.random.RandomState()
private_key, public_key = nufhe.make_key_pair(thr, rng)

size = 32

bits1 = rng.randint(0, 2, size=size).astype(numpy.bool)
bits2 = rng.randint(0, 2, size=size).astype(numpy.bool)

ciphertext1 = nufhe.encrypt(thr, rng, private_key, bits1)
ciphertext2 = nufhe.encrypt(thr, rng, private_key, bits2)

reference = ~(bits1 * bits2)

result = nufhe.empty_ciphertext(thr, public_key.params, ciphertext1.shape)
nufhe.gate_nand(thr, public_key, result, ciphertext1, ciphertext2)

result_bits = nufhe.decrypt(thr, private_key, result)
assert (result_bits == reference).all()