Advertisement
Guest User

Untitled

a guest
Nov 17th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import sys
  4.  
  5. # ----------------------------------------------------------------------------
  6. # Crypto4o functions start here
  7. # ----------------------------------------------------------------------------
  8.  
  9. class glfsr:
  10. def __init__(self, polynom, initial_value):
  11. self.polynom = polynom | 1
  12. self.data = initial_value
  13. tmp = polynom
  14.  
  15. self.mask = 1
  16.  
  17. while tmp != 0:
  18. if tmp & self.mask != 0:
  19. tmp = tmp ^ self.mask;
  20.  
  21. if tmp == 0:
  22. break
  23.  
  24. self.mask = self.mask << 1
  25.  
  26. def next_state(self):
  27. self.data = self.data << 1
  28.  
  29. retval = 0
  30.  
  31. if self.data & self.mask != 0:
  32. retval = 1
  33. self.data = self.data ^ self.polynom
  34.  
  35. return retval
  36.  
  37. class sprng:
  38. def __init__(self, polynom_d, init_value_d, polynom_c, init_value_c):
  39. self.glfsr_d = glfsr(polynom_d, init_value_d)
  40. self.glfsr_c = glfsr(polynom_c, init_value_c)
  41.  
  42. def next_byte(self):
  43. byte = 0
  44. bitpos = 7
  45.  
  46. while 1 == 1:
  47. bit_d = self.glfsr_d.next_state()
  48. bit_c = self.glfsr_c.next_state()
  49.  
  50. if bit_c != 0:
  51. bit_r = bit_d
  52. byte = byte | (bit_r << bitpos)
  53.  
  54. bitpos = bitpos - 1
  55.  
  56. if bitpos < 0:
  57. break
  58.  
  59. return byte
  60.  
  61. # ----------------------------------------------------------------------------
  62. # Crypto4o functions end here
  63. # ----------------------------------------------------------------------------
  64.  
  65. def main():
  66. prng = sprng(int(sys.argv[3], 16), int(sys.argv[4], 16),
  67. int(sys.argv[5], 16), int(sys.argv[6], 16))
  68.  
  69. print "GLFSR D0: using polynom 0x%X, initial value: 0x%X." % (int(sys.argv[3], 16), int(sys.argv[4], 16))
  70. print "GLFSR C0: using polynom 0x%X, initial value: 0x%X." % (int(sys.argv[5], 16), int(sys.argv[6], 16))
  71.  
  72. f = open(sys.argv[1], "rb")
  73. g = open(sys.argv[2], "wb")
  74.  
  75. while 1 == 1:
  76. input_ch = f.read(1)
  77.  
  78. if input_ch == "":
  79. break
  80.  
  81. random_ch = prng.next_byte() & 0xff
  82. g.write(chr(ord(input_ch) ^ random_ch))
  83.  
  84. f.close()
  85. g.close()
  86.  
  87. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement