Skip to content

Instantly share code, notes, and snippets.

@iH8c0ff33
Created August 19, 2015 16:45
Show Gist options
  • Save iH8c0ff33/3ca3dd69828a002eecfb to your computer and use it in GitHub Desktop.
Save iH8c0ff33/3ca3dd69828a002eecfb to your computer and use it in GitHub Desktop.
CoC nonce scramble
class scramble7prng:
def __init__(self, seed):
self.ix= 0
self.buffer= [ 0 for i in range(624) ]
self.seedbuffer(seed)
def dumpbuffer(self):
for x in self.buffer:
print " %08x" % x,
print
def seedbuffer(self, seed):
for i in range(624):
self.buffer[i]= seed
seed= (1812433253 * ((seed ^ rshift(seed, 30)) + 1)) & 0xFFFFFFFF
def getbyte(self):
x= self.getint()
if isneg(x):
x= negate(x)
return x % 256
def getint(self):
if self.ix==0:
self.mixbuffer()
val= self.buffer[self.ix]
self.ix = (self.ix+1) % 624
val ^= rshift(val, 11) ^ lshift((val ^ rshift(val, 11)), 7) & 0x9D2C5680;
return rshift((val ^ lshift(val, 15) & 0xEFC60000), 18) ^ val ^ lshift(val, 15) & 0xEFC60000;
def mixbuffer(self):
i=0
j=0
while i<624:
i += 1
v4= (self.buffer[i%624] & 0x7FFFFFFF) + (self.buffer[j]&0x80000000)
v6 = rshift(v4,1) ^ self.buffer[(i+396)%624]
if v4&1:
v6 ^= 0x9908B0DF
self.buffer[j] = v6
j += 1
def newscramble(serverrandom, seed):
prng= scramble7prng(seed)
for i in range(100):
byte100= prng.getbyte()
return "".join(chr(ord(c)^(prng.getbyte()&byte100)) for c in serverrandom)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment