def getsignature(self, ask, who): ask_s = b64decode(str(raw_input(ask))) s = G1Elem.from_bytes(ask_s, self.params[0]) ask_p = b64decode(str(raw_input(who))) p = G2Elem.from_bytes(ask_p, self.params[0]) assert p in self.vks return (s, p)
def aggr_pdf(pdfname, pdfpaths, origin_directory): params = setup() (G, o, g1, g2, e) = params # 从多个文件中读出所有签名 sigs = [] for path in pdfpaths: pdf = PdfReader(path + os.path.sep + pdfname) try: sig_str:str = pdf.Info.signature sig_str = sig_str[1:-1] sig_bytes = base64.b64decode( sig_str.encode("utf-8") ) sig_g1elem = G1Elem.from_bytes(sig_bytes,G) except: sig_g1elem = None sigs.append(sig_g1elem) print('all_sigs:',sigs) # 聚合所有签名 sigma = aggregate_sigma(params, sigs) print('type sigma:',type(sigma)) sigma_bytes = sigma.export() sigma_str = base64.b64encode(sigma_bytes).decode() # 将聚合后的签名写回运行路径中新建的以blockstackid命名的pdf中 pdf = PdfReader(origin_directory + os.path.sep + pdfname) metadata_new = PdfDict(signature = sigma_str) pdf.Info.update(metadata_new) PdfWriter().write(pdfname, pdf)
def get_sig(r, params, n, text): r.recvuntil("what do you want to do?") r.sendline(n) r.recvuntil("you want me to sign what?") r.sendline(text) r.recvline() r.recvline() l = r.recvline()[:-1] return G1Elem.from_bytes(b64decode(l), params[0])
def sig(x): return G1Elem.from_bytes(b64decode(x), G)
return b64encode(x.export()) params = setup() # ask_p = b64decode(str(raw_input("P0"))) p0 = G2Elem.from_bytes(p0, params[0]) # ask_p = b64decode(str(raw_input("P1"))) p1 = G2Elem.from_bytes(p1, params[0]) # ask_p = b64decode(str(raw_input("P2"))) p2 = G2Elem.from_bytes(p2, params[0]) # ask_s = b64decode(str(raw_input("S0"))) s0 = G1Elem.from_bytes(s0, params[0]) # ask_s = b64decode(str(raw_input("S2"))) s2 = G1Elem.from_bytes(s2, params[0]) (G, o, g1, g2, e) = params t = 3 l = [lagrange_basis(t, o, i, 0) for i in range(1, t + 1)] t = 2 l2 = [lagrange_basis(t, o, i, 0) for i in range(1, t + 1)] deetv = [p0, p1, p2 * l2[0] + (p0 * l[0]).neg() + (p1 * l[1]).neg()] deets = [s0 * l2[1] + s2, (s0 * l2[0]).neg()] verif = aggregate_vk(params, deetv, threshold=True) for i in deets:
params = setup() publics = [] r.recvlines(3) publics.append(G2Elem.from_bytes(b64decode(r.recvline()), params[0])) r.recvline() publics.append(G2Elem.from_bytes(b64decode(r.recvline()), params[0])) r.recvline() publics.append(G2Elem.from_bytes(b64decode(r.recvline()), params[0])) r.recvline() r.sendline('3') r.recvline() r.sendline('this stuff') r.recvline() s = G1Elem.from_bytes(b64decode(r.recvline()), params[0]) r.recvline() r.sendline('4') r.recvline() r.recvline() r.sendline(b64encode(s.export())) r.recvline() r.sendline(b64encode(publics[2].export())) r.recvline() r.sendline(b64encode((2 * s).export())) r.recvline() r.sendline(b64encode(publics[1].export()))
# signature of p3 for message "this stuff" s3 = io.recvline() io.recv() io.sendline("4") io.recvline() io.recvline() # generating a new public key b = 3 pk = b * g2 m = "this stuff" # signature of my key for message "this stuff" sm = sign(params, b, m) p3_point = G2Elem.from_bytes(b64decode(p3), G) s3_point = G1Elem.from_bytes(b64decode(s3), G) io.sendline(b64encode(sm.export())) io.recv() io.sendline(b64encode(p3_point.export())) io.recv() io.sendline(b64encode(s3_point.export())) io.recv() io.sendline(b64encode(p3_point.export())) io.recv() io.sendline(b64encode((pk + pk - p3_point).export())) print(io.recv()) io.close()
def _unpackG1(self, elem): G = self.params[0] return G1Elem.from_bytes(unhexlify(elem.encode()), G)
def unpackG1(params, x): G = params[0] return G1Elem.from_bytes(unhexlify(x.encode()), G)