aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py')
-rw-r--r--Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py b/Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py
new file mode 100644
index 000000000..48d21e32f
--- /dev/null
+++ b/Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/test.py
@@ -0,0 +1,129 @@
+import bitcoin as b
+import random
+import sys
+import math
+from pyethereum import tester as t
+import substitutes
+import time
+
+vals = [random.randrange(2**256) for i in range(12)]
+
+test_points = [list(p[0]) + list(p[1]) for p in
+ [b.jordan_multiply(((b.Gx, 1), (b.Gy, 1)), r) for r in vals]]
+
+G = [b.Gx, 1, b.Gy, 1]
+Z = [0, 1, 0, 1]
+
+
+def neg_point(p):
+ return [p[0], b.P - p[1], p[2], b.P - p[3]]
+
+s = t.state()
+s.block.gas_limit = 10000000
+t.gas_limit = 1000000
+
+
+c = s.contract('modexp.se')
+print "Starting modexp tests"
+
+for i in range(0, len(vals) - 2, 3):
+ o1 = substitutes.modexp_substitute(vals[i], vals[i+1], vals[i+2])
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=vals[i:i+3])
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+c = s.contract('jacobian_add.se')
+print "Starting addition tests"
+
+for i in range(2):
+ P = test_points[i * 2]
+ Q = test_points[i * 2 + 1]
+ NP = neg_point(P)
+
+ o1 = substitutes.jacobian_add_substitute(*(P + Q))
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=P + Q)
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+ o1 = substitutes.jacobian_add_substitute(*(P + NP))
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=P + NP)
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+ o1 = substitutes.jacobian_add_substitute(*(P + P))
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=P + P)
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+ o1 = substitutes.jacobian_add_substitute(*(P + Z))
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=P + Z)
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+ o1 = substitutes.jacobian_add_substitute(*(Z + P))
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=Z + P)
+ #assert o1["gas"] == o2["gas"], (o1, o2)
+ assert o1["output"] == o2["output"], (o1, o2)
+
+
+c = s.contract('jacobian_mul.se')
+print "Starting multiplication tests"
+
+
+mul_tests = [
+ Z + [0],
+ Z + [vals[0]],
+ test_points[0] + [0],
+ test_points[1] + [b.N],
+ test_points[2] + [1],
+ test_points[2] + [2],
+ test_points[2] + [3],
+ test_points[2] + [4],
+ test_points[3] + [5],
+ test_points[3] + [6],
+ test_points[4] + [7],
+ test_points[4] + [2**254],
+ test_points[4] + [vals[1]],
+ test_points[4] + [vals[2]],
+ test_points[4] + [vals[3]],
+ test_points[5] + [2**256 - 1],
+]
+
+for i, test in enumerate(mul_tests):
+ print 'trying mul_test %i' % i, test
+ o1 = substitutes.jacobian_mul_substitute(*test)
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=test)
+ # assert o1["gas"] == o2["gas"], (o1, o2, test)
+ assert o1["output"] == o2["output"], (o1, o2, test)
+
+c = s.contract('ecrecover.se')
+print "Starting ecrecover tests"
+
+for i in range(5):
+ print 'trying ecrecover_test', vals[i*2], vals[i*2+1]
+ k = vals[i*2]
+ h = vals[i*2+1]
+ V, R, S = b.ecdsa_raw_sign(b.encode(h, 256, 32), k)
+ aa = time.time()
+ o1 = substitutes.ecrecover_substitute(h, V, R, S)
+ print 'sub', time.time() - aa
+ a = time.time()
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=[h, V, R, S])
+ print time.time() - a
+ # assert o1["gas"] == o2["gas"], (o1, o2, h, V, R, S)
+ assert o1["output"] == o2["output"], (o1, o2, h, V, R, S)
+
+# Explicit tests
+
+data = [[
+ 0xf007a9c78a4b2213220adaaf50c89a49d533fbefe09d52bbf9b0da55b0b90b60,
+ 0x1b,
+ 0x5228fc9e2fabfe470c32f459f4dc17ef6a0a81026e57e4d61abc3bc268fc92b5,
+ 0x697d4221cd7bc5943b482173de95d3114b9f54c5f37cc7f02c6910c6dd8bd107
+]]
+
+for datum in data:
+ o1 = substitutes.ecrecover_substitute(*datum)
+ o2 = s.profile(t.k0, c, 0, funid=0, abi=datum)
+ #assert o1["gas"] == o2["gas"], (o1, o2, datum)
+ assert o1["output"] == o2["output"], (o1, o2, datum)