from __future__ import division from IPython.html.widgets import * from IPython.display import display from collections import Counter from itertools import combinations, chain from hashlib import sha384 from time import time from sys import stdout display(HTMLWidget( value =""" """)) from __future__ import division import numpy as np import pyopencl as cl import pyopencl.array import pyopencl.tools %load_ext pyopencl.ipython_ext ctx = cl.create_some_context() queue = cl.CommandQueue(ctx) device=ctx.devices[0] print device.max_mem_alloc_size print device.max_work_group_size def python_md5(plaintext, pre_calculate=False): print len(plaintext) if pre_calculate: assert len(plaintext)>=52 X = np.zeros(16, dtype=np.uint32) DATA = np.uint32([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]) for i,c in enumerate(plaintext): X[i >> 2] |= ord(c) << ((i & 3) << 3) X[len(plaintext) >> 2] |= 0x80 << ((len(plaintext) & 3) << 3) X[14] = len(plaintext) << 3 print map(hex, X) S = lambda x,n : ((x << n) | ((x&0xffffffff) >> (32 - n)))& 0xFFFFFFFF def P(i0,i1,i2,i3,k,s,t): a,b,c,d = DATA[i0], DATA[i1], DATA[i2], DATA[i3] a += F(b,c,d) + X[k] + t a = S(a,s) + b DATA[i0] = a & 0xFFFFFFFF A,B,C,D = 0,1,2,3 F = lambda x,y,z: (z ^ (x & (y ^ z))) P( A, B, C, D, 0, 7, 0xD76AA478 ); P( D, A, B, C, 1, 12, 0xE8C7B756 ); P( C, D, A, B, 2, 17, 0x242070DB ); P( B, C, D, A, 3, 22, 0xC1BDCEEE ); P( A, B, C, D, 4, 7, 0xF57C0FAF ); P( D, A, B, C, 5, 12, 0x4787C62A ); P( C, D, A, B, 6, 17, 0xA8304613 ); P( B, C, D, A, 7, 22, 0xFD469501 ); P( A, B, C, D, 8, 7, 0x698098D8 ); P( D, A, B, C, 9, 12, 0x8B44F7AF ); P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); if pre_calculate: with open("lowest_md5.h","w") as f: for i in range(16): if i not in [11, 12]: print >>f, "#define X%d 0x%xU"%(i, X[i]) # print "#define X%d 0x%xU"%(i, X[i]) for i in range(4): print >>f, "#define DATA%d 0x%xU"%(i, DATA[i]) # print "#define DATA%d 0x%xU"%(i, DATA[i]) P( B, C, D, A, 11, 22, 0x895CD7BE ); P( A, B, C, D, 12, 7, 0x6B901122 ); P( D, A, B, C, 13, 12, 0xFD987193 ); P( C, D, A, B, 14, 17, 0xA679438E ); P( B, C, D, A, 15, 22, 0x49B40821 ); F = lambda x,y,z: (y ^ (z & (x ^ y))) P( A, B, C, D, 1, 5, 0xF61E2562 ); P( D, A, B, C, 6, 9, 0xC040B340 ) P( C, D, A, B, 11, 14, 0x265E5A51 ) P( B, C, D, A, 0, 20, 0xE9B6C7AA ); P( A, B, C, D, 5, 5, 0xD62F105D ); P( D, A, B, C, 10, 9, 0x02441453 ); P( C, D, A, B, 15, 14, 0xD8A1E681 ); P( B, C, D, A, 4, 20, 0xE7D3FBC8 ); P( A, B, C, D, 9, 5, 0x21E1CDE6 ); P( D, A, B, C, 14, 9, 0xC33707D6 ); P( C, D, A, B, 3, 14, 0xF4D50D87 ); P( B, C, D, A, 8, 20, 0x455A14ED ); P( A, B, C, D, 13, 5, 0xA9E3E905 ); P( D, A, B, C, 2, 9, 0xFCEFA3F8 ) P( C, D, A, B, 7, 14, 0x676F02D9 ) P( B, C, D, A, 12, 20, 0x8D2A4C8A ); F = lambda x,y,z: x ^ y ^ z P( A, B, C, D, 5, 4, 0xFFFA3942 ); P( D, A, B, C, 8, 11, 0x8771F681 ); P( C, D, A, B, 11, 16, 0x6D9D6122 ); P( B, C, D, A, 14, 23, 0xFDE5380C ); P( A, B, C, D, 1, 4, 0xA4BEEA44 ); P( D, A, B, C, 4, 11, 0x4BDECFA9 ); P( C, D, A, B, 7, 16, 0xF6BB4B60 ); P( B, C, D, A, 10, 23, 0xBEBFBC70 ); P( A, B, C, D, 13, 4, 0x289B7EC6 ); P( D, A, B, C, 0, 11, 0xEAA127FA ); P( C, D, A, B, 3, 16, 0xD4EF3085 ); P( B, C, D, A, 6, 23, 0x04881D05 ); P( A, B, C, D, 9, 4, 0xD9D4D039 ); P( D, A, B, C, 12, 11, 0xE6DB99E5 ); P( C, D, A, B, 15, 16, 0x1FA27CF8 ); P( B, C, D, A, 2, 23, 0xC4AC5665 ); F = lambda x,y,z: (y ^ (x | ~z)) P( A, B, C, D, 0, 6, 0xF4292244 ); P( D, A, B, C, 7, 10, 0x432AFF97 ); P( C, D, A, B, 14, 15, 0xAB9423A7 ); P( B, C, D, A, 5, 21, 0xFC93A039 ); P( A, B, C, D, 12, 6, 0x655B59C3 ); P( D, A, B, C, 3, 10, 0x8F0CCC92 ); P( C, D, A, B, 10, 15, 0xFFEFF47D ); P( B, C, D, A, 1, 21, 0x85845DD1 ); P( A, B, C, D, 8, 6, 0x6FA87E4F ); P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); P( C, D, A, B, 6, 15, 0xA3014314 ); P( B, C, D, A, 13, 21, 0x4E0811A1 ); P( A, B, C, D, 4, 6, 0xF7537E82 ); P( D, A, B, C, 11, 10, 0xBD3AF235 ); P( C, D, A, B, 2, 15, 0x2AD7D2BB ); P( B, C, D, A, 9, 21, 0xEB86D391 ); DATA[0]=(DATA[0]+0x67452301)&0xffffffff DATA[1]=(DATA[1]+0xefcdab89)&0xffffffff DATA[2]=(DATA[2]+0x98badcfe)&0xffffffff DATA[3]=(DATA[3]+0x10325476)&0xffffffff return DATA s0 = "http://weijr-eng.blogspot.com" template_str = s0+" "*(52-len(s0)-8)+"AAAAAAAA" print map(hex, python_md5(template_str, True)) from hashlib import md5 md5(template_str).hexdigest() %%cl_kernel -o "-I . -cl-strict-aliasing" #include "lowest_md5.h" __kernel void kernel_md5(__const ulong base, __global uint * out_buffer) { uint id = get_global_id(0); ulong code = base + id; __private uint X11 = code >> 32; __private uint X12 = code &0xffffffff; __private uint A, B, C, D; #define S(x,n) rotate(x,n) #define P(a,b,c,d,k,s,t) a += F(b,c,d) + X##k + t; a = S(a,s) + b; A = DATA0; B = DATA1; C = DATA2; D = DATA3; #define F(x,y,z) bitselect(z, y,x) P( B, C, D, A, 11, 22U, 0x895CD7BE ); P( A, B, C, D, 12, 7U, 0x6B901122 ); P( D, A, B, C, 13, 12U, 0xFD987193 ); P( C, D, A, B, 14, 17U, 0xA679438E ); P( B, C, D, A, 15, 22U, 0x49B40821 ); #undef F #define F(x,y,z) bitselect(y,x, z) P( A, B, C, D, 1, 5U, 0xF61E2562 ); P( D, A, B, C, 6, 9U, 0xC040B340 ); P( C, D, A, B, 11, 14U, 0x265E5A51 ); P( B, C, D, A, 0, 20U, 0xE9B6C7AA ); P( A, B, C, D, 5, 5U, 0xD62F105D ); P( D, A, B, C, 10, 9U, 0x02441453 ); P( C, D, A, B, 15, 14U, 0xD8A1E681 ); P( B, C, D, A, 4, 20U, 0xE7D3FBC8 ); P( A, B, C, D, 9, 5U, 0x21E1CDE6 ); P( D, A, B, C, 14, 9U, 0xC33707D6 ); P( C, D, A, B, 3, 14U, 0xF4D50D87 ); P( B, C, D, A, 8, 20U, 0x455A14ED ); P( A, B, C, D, 13, 5U, 0xA9E3E905 ); P( D, A, B, C, 2, 9U, 0xFCEFA3F8 ); P( C, D, A, B, 7, 14U, 0x676F02D9 ); P( B, C, D, A, 12, 20U, 0x8D2A4C8A ); #undef F #define F(x,y,z) (x ^ y ^ z) P( A, B, C, D, 5, 4U, 0xFFFA3942 ); P( D, A, B, C, 8, 11U, 0x8771F681 ); P( C, D, A, B, 11, 16U, 0x6D9D6122 ); P( B, C, D, A, 14, 23U, 0xFDE5380C ); P( A, B, C, D, 1, 4U, 0xA4BEEA44 ); P( D, A, B, C, 4, 11U, 0x4BDECFA9 ); P( C, D, A, B, 7, 16U, 0xF6BB4B60 ); P( B, C, D, A, 10, 23U, 0xBEBFBC70 ); P( A, B, C, D, 13, 4U, 0x289B7EC6 ); P( D, A, B, C, 0, 11U, 0xEAA127FA ); P( C, D, A, B, 3, 16U, 0xD4EF3085 ); P( B, C, D, A, 6, 23U, 0x04881D05 ); P( A, B, C, D, 9, 4U, 0xD9D4D039 ); P( D, A, B, C, 12, 11U, 0xE6DB99E5 ); P( C, D, A, B, 15, 16U, 0x1FA27CF8 ); P( B, C, D, A, 2, 23U, 0xC4AC5665 ); #undef F #define F(x,y,z) (y ^ (x | ~z)) P( A, B, C, D, 0, 6U, 0xF4292244 ); P( D, A, B, C, 7, 10U, 0x432AFF97 ); P( C, D, A, B, 14, 15U, 0xAB9423A7 ); P( B, C, D, A, 5, 21U, 0xFC93A039 ); P( A, B, C, D, 12, 6U, 0x655B59C3 ); P( D, A, B, C, 3, 10U, 0x8F0CCC92 ); P( C, D, A, B, 10, 15U, 0xFFEFF47D ); P( B, C, D, A, 1, 21U, 0x85845DD1 ); P( A, B, C, D, 8, 6U, 0x6FA87E4F ); P( D, A, B, C, 15, 10U, 0xFE2CE6E0 ); P( C, D, A, B, 6, 15U, 0xA3014314 ); P( B, C, D, A, 13, 21U, 0x4E0811A1 ); P( A, B, C, D, 4, 6U, 0xF7537E82 ); if( (A&0xFFFFFFFEU) == 2562383102U ) { P( D, A, B, C, 11, 10U, 0xBD3AF235 ); P( C, D, A, B, 2, 15U, 0x2AD7D2BB ); P( B, C, D, A, 9, 21U, 0xEB86D391 ); A+=0x67452301; B += 0xefcdab89; if( ( (B^A)&0xff)==0) out_buffer[id&0xff]=0x80000000|id; } #undef F } import sys from time import sleep, time step = 2**28 output=cl.array.zeros(queue, 16, dtype=np.uint32) t0=time() for i in range(0, 2**38, step): output.fill(0, queue) ret = kernel_md5(queue, (step,), None, np.uint64(i), output.data) ret.wait() result = output.get() for j in np.where(result>0)[0]: x =i+(result[j]&0x7fffffff) y = x >>32 x = x&0xffffffff s = template_str.replace('AAAAAAAA', "".join(chr((y>>(t*8))&0xff) for t in range(4)) + "".join(chr((x>>(t*8))&0xff) for t in range(4))) print hex(x), md5(s).hexdigest(),repr(s) sys.stdout.flush() #sleep(1) print time()-t0 import atitweak as ati from adl3 import ADLTemperature, ADL_Overdrive5_Temperature_Get, ADL_OK from adl3 import ADL_DL_FANCTRL_SPEED_TYPE_PERCENT, ADLFanSpeedValue, ADL_Overdrive5_FanSpeed_Get from adl3 import ADLPMActivity, ADL_Overdrive5_CurrentActivity_Get from ctypes import sizeof, byref ati.initialize() def gpu_activity(): adapters = ati.get_adapter_info() adapter = adapters[0] activity = ADLPMActivity() activity.iSize = sizeof(activity) if ADL_Overdrive5_CurrentActivity_Get(adapter.iAdapterIndex, byref(activity)) != ADL_OK: return None return (activity.iEngineClock/100.0, activity.iMemoryClock/100.0, activity.iVddc/1000.0, activity.iCurrentPerformanceLevel, activity.iActivityPercent) def gpu_temperature(): adapters = ati.get_adapter_info() adapter = adapters[0] temperature = ADLTemperature() temperature.iSize = sizeof(temperature) if ADL_Overdrive5_Temperature_Get(adapter.iAdapterIndex, 0, byref(temperature)) != ADL_OK: return None return temperature.iTemperature/1000 def gpu_fan_speed(): adapters = ati.get_adapter_info() adapter = adapters[0] fan_speed_value = ADLFanSpeedValue() fan_speed_value.iSize = sizeof(fan_speed_value) fan_speed_value.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_PERCENT if ADL_Overdrive5_FanSpeed_Get(adapter.iAdapterIndex, 0, byref(fan_speed_value)) != ADL_OK: return None return fan_speed_value.iFanSpeed print gpu_temperature(), gpu_fan_speed() # ati.shutdown() from IPython.html.widgets import * from IPython.display import display from time import sleep, time from sys import stdout from hashlib import md5 import cgi prefix_mask = 0xffffffffff000000 class ListTable(list): """ Overridden list class which takes a 2-dimensional list of the form [[1,2,3],[4,5,6]], and renders an HTML Table in IPython Notebook. """ def _repr_html_(self): html = ["
{} | ".format(cgi.escape(str(col))) for col in row)
html.append("