Advertisement
e4ch

z3.py

Jan 22nd, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.40 KB | None | 0 0
  1. from z3 import *
  2.  
  3. s = Solver()
  4. keystream = BitVec('keystream',258)
  5. #keystream = 0x989a137e549e7cd1b4f589c3498d5818838a2c5b74e56a47a99a1bb7c8dc1989
  6.  
  7. def next(x):
  8.   x = (x & 1) << 257 | x << 1 | x >> 255
  9.   y = 0
  10.   for i in range(256):
  11.     i0=(x>>i)&1
  12.     i1=((x>>i)&2)>>1
  13.     i2=((x>>i)&4)>>2
  14.     y|=(i0^(i1|i2))<<i
  15.   return y
  16.  
  17. #print(''.join(format(x, '02X') for x in keystream.to_bytes(32,'little')))
  18. #keystream=next(keystream)
  19. #print(''.join(format(x, '02X') for x in keystream.to_bytes(32,'little')))
  20.  
  21. #if(keystream==0xedeb3d03d7e3875a9714de657ed54c2dc4db66c9173d2be8aeeb28907d462ede):
  22. #  print("sat!!!")
  23.  
  24. keystreamnew=keystream
  25. for i in range(128):
  26.   keystreamnew = next(keystreamnew)
  27.  
  28. #s.add(keystreamnew==0xedeb3d03d7e3875a9714de657ed54c2dc4db66c9173d2be8aeeb28907d462ede)
  29. s.add(keystreamnew==0x52cc2cc124e3f2c28f5b9123904dc015babfd5c0988cb8d670f190fbb57593e2)
  30.  
  31. res=s.check()
  32. valueres=int(str(s.model()[keystream]))
  33. print(''.join(format(x, '02X') for x in valueres.to_bytes(33,'little')))
  34. s = Solver()
  35. s.add(keystreamnew==valueres)
  36. res=s.check()
  37. print(''.join(format(x, '02X') for x in int(str(s.model()[keystream])).to_bytes(33,'little')))
  38.  
  39. while(res==sat):
  40.   resnum=int(str(s.model()[keystream]))
  41.   #print(resnum)
  42.   print(''.join(format(x, '02X') for x in resnum.to_bytes(33,'little')))
  43.   #print(s.model()[keystream])
  44.   s.add(Or(keystream!=s.model()[keystream]))
  45.   res=s.check()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement