Beispiel #1
0
 def post_initialize(self):
     n_copybits = 4
     n_outbits = 3
     z1 = VPIntfClient.vpmsg_vector( [ util.random_felem() for _ in range(0, n_outbits) ])
     z1 = chr(Defs.P_RECV_Z1) + z1[1:]
     z2 = VPIntfClient.vpmsg_vector( [ util.random_felem() for _ in range(0, n_copybits) ])
     z2 = chr(Defs.P_RECV_Z2) + z2[1:]
     self.enqueue(z1)
     self.enqueue(z2)
Beispiel #2
0
 def post_initialize(self):
     n_copybits = 4
     n_copies = 1 << n_copybits
     n_inbits = 3
     n_inputs = 1 << n_inbits
     n_gates = 8
     z2v = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, 2 * n_copybits) ], Defs.P_RECV_Z2VALS)
     z1x = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_gates) ], Defs.P_RECV_Z1CHI)
     lvs = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copies * n_inputs)], Defs.P_RECV_LAYVALS)
     self.enqueue(z2v)
     self.enqueue(z1x)
     self.enqueue(lvs)
Beispiel #3
0
    def post_initialize(self):
        n_inbits = 3
        n_copybits = 4
        n_inputs = 1 << n_inbits
        n_copies = 1 << n_copybits

        inputs = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copies * n_inputs) ], Defs.V_RECV_INPUTS)
        expect = VPIntfClient.vpmsg_vector([ util.random_felem() ], Defs.V_RECV_EXPECT)
        z1v = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_inbits) ], Defs.V_RECV_Z1)
        z2v = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copybits) ], Defs.V_RECV_Z2)

        self.enqueue(inputs)
        self.enqueue(expect)
        self.enqueue(z1v)
        self.enqueue(z2v)
Beispiel #4
0
    def post_initialize(self):
        n_outbits = 3
        n_copybits = 4
        n_outputs = 1 << n_outbits
        n_copies = 1 << n_copybits

        outputs = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copies * n_outputs) ], Defs.V_RECV_OUTPUTS)
        self.enqueue(outputs)
Beispiel #5
0
    def post_initialize(self):
        n_muxsel = 1
        n_outbits = 3
        n_copybits = 4
        n_coeffs = 4

        muxsels = VPIntfClient.vpmsg_bitvector(util.random_bitvec(n_muxsel), Defs.V_RECV_MUXSEL)
        expect = VPIntfClient.vpmsg_vector([ util.random_felem() ], Defs.V_RECV_EXPECT)
        z1v = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_outbits) ], Defs.V_RECV_Z1)
        z2v = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copybits) ], Defs.V_RECV_Z2)
        coeff = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_coeffs) ], Defs.V_RECV_COEFFS)

        self.enqueue(muxsels)
        self.enqueue(expect)
        self.enqueue(z1v)
        self.enqueue(z2v)
        self.enqueue(coeff)
Beispiel #6
0
 def post_initialize(self):
     n_copies = 16
     n_inputs = 8
     n_muxsel = 1
     muxsels = VPIntfClient.vpmsg_bitvector(util.random_bitvec(n_muxsel))
     muxsels = chr(Defs.P_RECV_MUXSEL) + muxsels[1:]
     inputs = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, n_copies * n_inputs) ])
     inputs = chr(Defs.P_RECV_LAYVALS) + inputs[1:]
     self.enqueue(muxsels)
     self.enqueue(inputs)
Beispiel #7
0
    def start_computation(cls):
        cls.restart_computation()

        muxsel = cls.server_info.muxsels
        inputs = cls.server_info.inputs

        if muxsel is None:
            muxsel = VPIntfClient.vpmsg_bitvector(util.random_bitvec(cls.n_muxsel))
            cls.server_info.muxsels = muxsel
        else:
            assert len(muxsel) == cls.n_muxsel, "Wrong number of muxsel bits supplied"
            muxsel = VPIntfClient.vpmsg_bitvector(muxsel)

        if inputs is None:
            if cls.i_values is None:
                ivals = [ util.random_felem() for _ in range(0, cls.n_copies * cls.n_inputs) ]
            else:
                ivals = [ x if x is not None else util.random_felem() for x in cls.i_values * cls.n_copies ]

            cls.server_info.inputs = ivals
            inputs = VPIntfClient.vpmsg_vector(ivals)
        else:
            assert len(inputs) == cls.n_copies * cls.n_inputs, "Wrong number of inputs supplied"
            ivals = inputs
            inputs = VPIntfClient.vpmsg_vector(inputs)

        if cls.debug_prv is not None:
            dv_ivals = cls.unflatten(ivals, True)
            cls.debug_prv.set_inputs(dv_ivals)

        # muxsels to all verifier layers
        muxsel = chr(Defs.V_RECV_MUXSEL) + muxsel[1:]
        for lay in cls.Verifier.layers:
            lay.enqueue(muxsel)

        # muxsels to all prover and computation layers
        muxsel = chr(Defs.P_RECV_MUXSEL) + muxsel[1:]
        for lay in cls.Computation.layers:
            lay.enqueue(muxsel)

        for lay in cls.Prover.layers:
            lay.enqueue(muxsel)

        # inputs to P circuit computation and top P layer
        inputs = chr(Defs.P_RECV_LAYVALS) + inputs[1:]
        cls.Computation.layers[cls.n_layers - 1].enqueue(inputs)
        cls.Prover.layers[cls.n_layers - 1].enqueue(inputs)
        # inputs to V input layer
        inputs = chr(Defs.V_RECV_INPUTS) + inputs[1:]
        cls.Verifier.inputs.enqueue(inputs)

        # if we're running the ckt in software, do it now
        if cls.sw_ckt is not None:
            for (idx, lcnts) in enumerate(reversed(cls.sw_ckt.get_counts())):
                nextcnt = [ lcnts[0], lcnts[1], 0, cls.n_cpar * lcnts[2], cls.n_cpar * lcnts[3], 0 ]
                cls.Computation.layers[idx].counts.append(nextcnt)

            (ckt_outputs, lay_outputs) = cls.sw_ckt.run(cls.unflatten(ivals, False), False)
            cls.server_info.outputs = cls.flatten(ckt_outputs)
            outmsg = VPIntfClient.vpmsg_vector(cls.server_info.outputs, Defs.V_RECV_OUTPUTS)
            cls.Verifier.outputs.enqueue(outmsg)

            for (idx, vals) in enumerate(reversed(lay_outputs[1:])):
                laymsg = VPIntfClient.vpmsg_vector(cls.flatten(vals), Defs.P_RECV_LAYVALS)
                cls.Prover.layers[idx].enqueue(laymsg)
Beispiel #8
0
    def do_handle(self):
        msg = self.dequeue()
        print len(msg), ':', msg, '\n'

        coeff = VPIntfClient.vpmsg_vector([ util.random_felem() for _ in range(0, 4) ], Defs.V_RECV_COEFFS)
        self.enqueue(coeff)
Beispiel #9
0
    def do_handle(self):
        msg = self.dequeue()
        print len(msg), ':', msg, '\n'

        tau = VPIntfClient.vpmsg_vector([ util.random_felem() ], Defs.P_RECV_TAU)
        self.enqueue(tau)