Shrinking Generator - An Implementation of A Shrinking Generator in Python

An Implementation of A Shrinking Generator in Python

This example uses two Galois LFRSs to produce the output pseudorandom bitstream. The python code can be used to encrypt and decrypt a file or any bytestream.

#!/usr/bin/python import sys # ---------------------------------------------------------------------------- # Crypto4o functions start here # ---------------------------------------------------------------------------- class glfsr: def __init__(self, polynom, initial_value): self.polynom = polynom | 1 self.data = initial_value tmp = polynom self.mask = 1 while tmp != 0: if tmp & self.mask != 0: tmp = tmp ^ self.mask; if tmp == 0: break self.mask = self.mask << 1 def next_state(self): self.data = self.data << 1 retval = 0 if self.data & self.mask != 0: retval = 1 self.data = self.data ^ self.polynom return retval class sprng: def __init__(self, polynom_d, init_value_d, polynom_c, init_value_c): self.glfsr_d = glfsr(polynom_d, init_value_d) self.glfsr_c = glfsr(polynom_c, init_value_c) def next_byte(self): byte = 0 bitpos = 7 while 1 == 1: bit_d = self.glfsr_d.next_state bit_c = self.glfsr_c.next_state if bit_c != 0: bit_r = bit_d byte = byte | (bit_r << bitpos) bitpos = bitpos - 1 if bitpos < 0: break return byte # ---------------------------------------------------------------------------- # Crypto4o functions end here # ---------------------------------------------------------------------------- def main: prng = sprng(int(sys.argv, 16), int(sys.argv, 16), int(sys.argv, 16), int(sys.argv, 16)) print "GLFSR D0: using polynom 0x%X, initial value: 0x%X." % (int(sys.argv, 16), int(sys.argv, 16)) print "GLFSR C0: using polynom 0x%X, initial value: 0x%X." % (int(sys.argv, 16), int(sys.argv, 16)) f = open(sys.argv, "rb") g = open(sys.argv, "wb") while 1 == 1: input_ch = f.read(1) if input_ch == "": break random_ch = prng.next_byte & 0xff g.write(chr(ord(input_ch) ^ random_ch)) f.close g.close main

The C code is also available, see External links.

Read more about this topic:  Shrinking Generator

Famous quotes containing the words shrinking and/or generator:

    And my spirit is grown to a lordly great compass within,
    That the length and the breadth and the sweep of the marshes of
    Glynn
    Will work me no fear like the fear they have wrought me of yore
    When length was failure, and when breadth was but bitterness sore,
    And when terror and shrinking and dreary unnamable pain
    Drew over me out of the merciless miles of the plain,—
    Oh, now, unafraid, I am fain to face
    The vast sweet visage of space.
    Sidney Lanier (1842–1881)

    He admired the terrible recreative power of his memory. It was only with the weakening of this generator whose fecundity diminishes with age that he could hope for his torture to be appeased. But it appeared that the power to make him suffer of one of Odette’s statements seemed exhausted, then one of these statements on which Swann’s spirit had until then not dwelled, an almost new word relayed the others and struck him with new vigor.
    Marcel Proust (1871–1922)