Exemple #1
0
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)
Exemple #3
0
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)
Exemple #5
0
    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:
Exemple #6
0
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()))
Exemple #7
0
# 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()
Exemple #8
0
 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)