Esempio n. 1
0
def test_pohlig():
    a = 2
    b = 3
    p = 1125899839733759
    order = 1125899867612160
    k = randrange(2, order)
    curve = ec_curve(a, b, p)
    pt1 = curve(436757568245484, 726713018309225)
    pt2 = curve.multiply(k, pt1)
    res = pohlig(curve, pt1, pt2, order)
    assert res == k
Esempio n. 2
0
def test_pollard_rho():
    a = 2
    b = 9
    p = 1035418103
    order = 1035356653
    k = randrange(2, order)
    curve = ec_curve(a, b, p)
    pt1 = curve(769278016, 752868328)
    pt2 = curve.mult(k, pt1)
    res = pollard_rho(curve, pt1, pt2, order)
    assert res == k
Esempio n. 3
0
def test_bsgs():
    a = 2
    b = 3
    p = 4111
    order = 4120
    k = randrange(2, order)
    curve = ec_curve(a, b, p)
    pt1 = curve(2672, 2565)
    pt2 = curve.mult(k, pt1)
    res = bsgs(curve, pt1, pt2, order)
    assert res == k
Esempio n. 4
0
def test_smart():
	a = 425706413842211054102700238164133538302169176474
	b = 203362936548826936673264444982866339953265530166
	p = 730750818665451459112596905638433048232067471723
	order = 730750818665451459112596905638433048232067471723
	k = randrange(0, order)
	curve = ec_curve(a, b, p)
	pt1 = curve(
	    282839918090522288605124127127354425085389489933,
	    575310508344796277762061084697250650618482060609,
	)
	pt2 = curve.multiply(k, pt1)
	res = smart(curve, pt1, pt2)
	assert res == k
Esempio n. 5
0
def test_pollard_kangaroo():
    a = 0
    b = 7
    p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
    order = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
    k = 1000
    curve = ec_curve(a, b, p, verify=False)
    G = curve(
        0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
        0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8,
    )
    F = curve.mult(k, G)
    res = pollard_kangaroo(G, curve, F, 0, 2000)
    assert res == k
Esempio n. 6
0
def smart(curve, P, Q):
	A = curve.a
	x1, y1 = hensel_lift(curve, P)
	x2, y2 = hensel_lift(curve, Q)
	lifted_p = curve.p**2
	lifted_a = (y2**2 - y1**2 - (x2**3 - x1**3))
	lifted_a = (lifted_a * modinv(x2 - x1, lifted_p)) % lifted_p
	lifted_b = (y1**2 - x1**3 - A * x1) % lifted_p
	modulo = curve.p**2
	# do not verify curve params
	lifted_curve = ec_curve(lifted_a, lifted_b, lifted_p, verify=False)
	lifted_pt1 = lifted_curve.mult(curve.p - 1, lifted_curve(x1, y1))
	lifted_pt2 = lifted_curve.mult(curve.p - 1, lifted_curve(x2, y2))
	dx1 = ((lifted_pt1.x - x1) // curve.p) % modulo
	dy1 = ((lifted_pt2.x - x2) // curve.p) % modulo
	dx2 = lifted_pt1.y - y1
	dy2 = lifted_pt2.y - y2
	m = (dy1 * dx2 * modinv(dx1 * dy2, modulo)) % modulo
	return m % curve.p