def set_rvals_p(self, rvals, r0val, rZval): assert self.nbits == len(rvals) if self.v1bits > 0: mvals = VerifierIOMLExt.compute_beta(rvals[:self.v1bits], self.com.rec_q) assert len(mvals) == len(self.tvals) assert len(mvals) == len(self.svals) self.avals = util.vector_times_matrix(self.tvals, mvals, self.com.rec_q) self.rAval = util.dot_product(self.svals, mvals, self.com.rec_q) else: self.avals = self.tvals[0] self.rAval = self.svals[0] self.bvals = VerifierIOMLExt.compute_beta(rvals[self.v1bits:], self.com.rec_q, r0val) self.rZval = rZval
def eval_finish(self, chal, szeta): # clean up for reuse of this object by V self.nbits = None zvals = util.vector_times_matrix(self.tvals, self.v1vals, self.com.rec_q) zvals = [(chal * z + d) % self.gops.q for (d, z) in izip(self.dvals, zvals)] zh = chal * sum((si * v1i) % self.gops.q for (si, v1i) in izip(self.svals, self.v1vals)) zh += self.rhval zh %= self.gops.q zc = (chal * szeta + self.rcval) % self.gops.q if self.com.rec: self.com.rec_q.did_mul(len(zvals) + 2) self.com.rec_q.did_add(len(zvals) + len(self.svals) + 1) return (zvals, zh, zc)