diff --git a/cycle_finding_function_collision_generator.py b/cycle_finding_function_collision_generator.py new file mode 100644 index 0000000..4c5790f --- /dev/null +++ b/cycle_finding_function_collision_generator.py @@ -0,0 +1,49 @@ +from ethereum.utils import sha3 +import sys + +STEPLENGTH = 100 + +dp = {} + +def step(inp): + return sha3('function_'+inp.encode('hex')+'()')[:4] + +def run_round(inp): + orig_inp = inp + for i in range(STEPLENGTH): + inp = step(inp) + if inp in dp.keys(): + print 'Found!', i + 1, repr(inp) + return(True, i + 1, inp) + dp[inp] = orig_inp + return(False, None, inp) + +y = '\xff' * 4 +orig_y = y +rounds = 0 +while 1: + print 'Running round', rounds + rounds += 1 + x, t, y2 = run_round(y) + if x: + prev1, prev2 = y, dp[y2] + assert prev1 != prev2 + # print '-----' + for i in range(STEPLENGTH - t): + # print repr(prev2) + prev2 = step(prev2) + # print '-----' + for i in range(t): + # print repr(prev1), repr(prev2) + next1 = step(prev1) + next2 = step(prev2) + if next1 == next2: + print 'Found!' + print 'function_'+prev1.encode('hex')+'()' + print 'function_'+prev2.encode('hex')+'()' + sys.exit() + prev1, prev2 = next1, next2 + # print repr(prev1), repr(prev2) + raise Exception("Something weird happened") + else: + y = y2