Exemplo n.º 1
0
def main():
    curve = SuperCurve(
        field=14753,
        order=7919,
        a=1,
        b=-1,
        g=(1, 1),
    )
    # print curve parameters generically
    print(curve)

    # xP = Q
    secret_scalar = random.randrange(curve.order)
    base = curve.g
    pub = curve.mult(secret_scalar, base)
    print("Public key: {}".format(pub))
    print("Secret scalar: {}".format(secret_scalar))

    while True:
        user_input = input("What is the secret? ")

        if curve.mult(user_input, base) == pub:
            with open("flag.txt", "r") as f:
                print(f.read())
            break
        else:
            print("WRONGGG!")
            continue

    return 0
Exemplo n.º 2
0
def log(curve, p, q):
    assert curve.is_on_curve(p)
    assert curve.is_on_curve(q)

    start = random.randrange(curve.order)
    r = curve.mult(start, p)

    for x in range(curve.order):
        if q == r:
            logarithm = (start + x) % curve.order
            steps = x + 1
            return logarithm, steps
        r = curve.add(r, p)

    raise AssertionError('logarithm not found')
Exemplo n.º 3
0
Arquivo: solver.py Projeto: Gdasl/CTFs
def go():
    curve = SuperCurve(
        field=14753,
        order=14660,
        a=1,
        b=-1,
        g=(1, 1),
    )

    d = {}
    d2 = {}
    base = curve.g
    for i in range(curve.order):
        pub = curve.mult(i, base)
        d[pub] = i
        d2[i] = pub
    return d, d2
Exemplo n.º 4
0
#!/usr/bin/env python3
from pwn import *
from supercurve import SuperCurve, curve

r = remote('crypto.chal.csaw.io', 1000)

r.recvlines(4)
public = eval(r.recvline().partition(b'Public key: ')[2])
r.recvline()

for i in range(7919):
    if curve.mult(i, curve.g) == public:
        r.sendline(str(i))
        break

r.interactive()
Exemplo n.º 5
0
import random
from supercurve import SuperCurve, curve

curve = SuperCurve(
    field=14753,
    order=7919,
    a=1,
    b=-1,
    g=(1, 1),
)

match = input('What is the public key? ')

for secret_scalar in range(curve.order):
    base = curve.g
    pub = curve.mult(secret_scalar, base)
    if (str(pub)) == match:
        print(secret_scalar)