Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class sead_rand:
- def __init__(self, seed):
- self.seed = u32(seed)
- self.state = [self.seed]
- for i in xrange(1, 5):
- self.state.append(u32(0x6C078965 * (self.state[-1] ^ (self.state[-1] >> 30)) + i))
- self.state = self.state[1:]
- def load_state(self, state):
- self.state = state[:]
- def get_u32(self):
- a = u32(self.state[0] ^ (self.state[0] << 11))
- self.state[0] = self.state[1]
- b = u32(self.state[3])
- c = u32(a ^ (a >> 8) ^ b ^ (b >> 19))
- self.state[1] = self.state[2]
- self.state[2] = b
- self.state[3] = c
- --------------------------
- rnd.load_state(list(struct.unpack('<IIII', seed)))
- key = []
- for _ in xrange(8):
- k = u32(0)
- for _ in xrange(4):
- k <<= 8
- k |= u32((crypt_tab[rnd.get_u32() >> 26] >> ((rnd.get_u32() >> 27) & 0x18)) & 0xFF)
- key.append(k)
- 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