Ejemplo n.º 1
0
def run(code, tape_size=2):
    ctx = NUFHEContext()
    #ctx = FakeContext()

    secret_key = ctx.generate_keys()

    # Create tape with size of 2

    tape = Tape()
    tape_indices = tape.generate_tape(tape_size, ctx, secret_key)

    utils.flag = Number.from_plaintext(1, ctx, secret_key, size=1)
    utils.one = Number.from_plaintext(1, ctx, secret_key, size=1)
    utils.zero = Number.from_plaintext(0, ctx, secret_key, size=1)

    # Initial state of machine

    data_ptr = Number.from_plaintext(0, ctx, secret_key)
    instruction_ptr = Number.from_plaintext(0, ctx, secret_key)

    # Defines instructions

    inc_data_ptr = Number.from_plaintext(1, ctx, secret_key)
    inc_data_cell = Number.from_plaintext(2, ctx, secret_key)
    dec_data_ptr = Number.from_plaintext(3, ctx, secret_key)
    dec_data_cell = Number.from_plaintext(4, ctx, secret_key)
    mark_loop = Number.from_plaintext(5, ctx, secret_key)
    loop_back = Number.from_plaintext(6, ctx, secret_key)

    instruction_set = {
        "+": inc_data_cell,
        "-": dec_data_cell,
        ">": inc_data_ptr,
        "<": dec_data_ptr,
        "[": mark_loop,
        "]": loop_back
    }

    instructions, instruction_indices = VirtualMachine.compile(
        code, instruction_set, ctx, secret_key)

    blind_machine = VirtualMachine(tape, tape_indices, instruction_indices,
                                   instruction_set, instructions,
                                   instruction_ptr, data_ptr)

    blind_machine.run()

    pprint.pprint(tape.decrypt_tape(secret_key))
Ejemplo n.º 2
0
    def test_add_cell(self):
        tape = Tape()
        tape.add_cell(self.zero)
        tape.add_cell(self.one)

        self.assertEqual(tape.decrypt_tape(self.sk), [0, 1])