Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. class sead_rand:
  2. def __init__(self, seed):
  3. self.seed = u32(seed)
  4. self.state = [self.seed]
  5. for i in xrange(1, 5):
  6. self.state.append(u32(0x6C078965 * (self.state[-1] ^ (self.state[-1] >> 30)) + i))
  7. self.state = self.state[1:]
  8. def load_state(self, state):
  9. self.state = state[:]
  10. def get_u32(self):
  11. a = u32(self.state[0] ^ (self.state[0] << 11))
  12. self.state[0] = self.state[1]
  13. b = u32(self.state[3])
  14. c = u32(a ^ (a >> 8) ^ b ^ (b >> 19))
  15. self.state[1] = self.state[2]
  16. self.state[2] = b
  17. self.state[3] = c
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30. --------------------------
  31.  
  32.  
  33. rnd.load_state(list(struct.unpack('<IIII', seed)))
  34. key = []
  35. for _ in xrange(8):
  36. k = u32(0)
  37. for _ in xrange(4):
  38. k <<= 8
  39. k |= u32((crypt_tab[rnd.get_u32() >> 26] >> ((rnd.get_u32() >> 27) & 0x18)) & 0xFF)
  40. key.append(k)
  41. return struct.pack('<IIII', key[0], key[1], key[2], key[3]), struct.pack('<IIII', key[4], key[5], key[6], key[7])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement