예제 #1
0
def cryptArray(data: bytes, seed: int, start: int, end: int):
    result = bytes()

    step = seed
    for i in range(start, end, 2):
        step = uint(step * 0x41C64E6D + 0x6073)
        result += crypt(data[i:i + 2], step >> 16)

    step = seed
    if (len(data) > end):
        for i in range(end, len(data), 2):
            step = uint(step * 0x41C64E6D + 0x6073)
            result += crypt(data[i:i + 2], step >> 16)

    return result
예제 #2
0
파일: sfmt.py 프로젝트: Acumenium/CitraRNG
    def initialize(self):
        self.sfmt.append(self.seed)

        for i in range(1, 624):
            y = 0x6C078965 * (self.sfmt[i - 1] ^ (self.sfmt[i - 1] >> 30)) + i
            self.sfmt.append(uint(y))

        self.periodCertificaion()
예제 #3
0
    def initialize(self):
        self.sfmt.append(self.seed)

        for i in range(1, 624):
            y = 0x6C078965 * (self.sfmt[i - 1] ^ (self.sfmt[i - 1] >> 30)) + i
            self.sfmt.append(uint(y))

        inner = self.seed & 1
        inner ^= self.sfmt[3] & 0x13c9e684
        inner ^= inner >> 16
        inner ^= inner >> 8
        inner ^= inner >> 4
        inner ^= inner >> 2
        inner ^= inner >> 1

        self.sfmt[0] ^= ~inner & 1
예제 #4
0
    def shuffle(self):
        a = 0
        b = 488
        c = 616
        d = 620
        while a < 624:
            self.sfmt[a +
                      3] = self.sfmt[a + 3] ^ (uint(self.sfmt[a + 3] << 8)) ^ (
                          self.sfmt[a + 2] >> 24) ^ (self.sfmt[c + 3] >> 8) ^ (
                              (self.sfmt[b + 3] >> 11)
                              & 0xbffffff6) ^ (uint(self.sfmt[d + 3] << 18))
            self.sfmt[a + 2] = self.sfmt[a + 2] ^ (
                uint(self.sfmt[a + 2] << 8)) ^ (self.sfmt[a + 1] >> 24) ^ (
                    uint(self.sfmt[c + 3] << 24)) ^ (self.sfmt[c + 2] >> 8) ^ (
                        (self.sfmt[b + 2] >> 11)
                        & 0xbffaffff) ^ (uint(self.sfmt[d + 2] << 18))
            self.sfmt[a + 1] = self.sfmt[a + 1] ^ (
                uint(self.sfmt[a + 1] << 8)) ^ (self.sfmt[a] >> 24) ^ (
                    uint(self.sfmt[c + 2] << 24)) ^ (self.sfmt[c + 1] >> 8) ^ (
                        (self.sfmt[b + 1] >> 11)
                        & 0xddfecb7f) ^ (uint(self.sfmt[d + 1] << 18))
            self.sfmt[a] = self.sfmt[a] ^ (uint(self.sfmt[a] << 8)) ^ (
                uint(self.sfmt[c + 1] << 24)) ^ (self.sfmt[c] >> 8) ^ (
                    (self.sfmt[b] >> 11)
                    & 0xdfffffef) ^ (uint(self.sfmt[d] << 18))
            c = d
            d = a
            a += 4
            b += 4
            if (b >= 624):
                b = 0

        self.index = 0
예제 #5
0
파일: mt.py 프로젝트: Acumenium/CitraRNG
    def initialize(self):
        self.mt.append(self.seed)

        for i in range(1, 624):
            y = 0x6C078965 * (self.mt[i - 1] ^ (self.mt[i - 1] >> 30)) + i
            self.mt.append(uint(y))