Advertisement
e4ch

super_cipher.py

Jan 22nd, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.75 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import argparse
  4. import sys
  5.  
  6. parser = argparse.ArgumentParser()
  7. parser.add_argument("key")
  8. args = parser.parse_args()
  9.  
  10. RULE = [86 >> i & 1 for i in range(8)]
  11. N_BYTES = 32
  12. N = 8 * N_BYTES
  13.  
  14. def next(x):
  15.   x = (x & 1) << N+1 | x << 1 | x >> N-1
  16.   y = 0
  17.   for i in range(N):
  18.     y |= RULE[(x >> i) & 7] << i
  19.   return y
  20.  
  21. # Bootstrap the PNRG
  22. keystream = int.from_bytes(args.key.encode(),'little')
  23. for i in range(N//2):
  24.   keystream = next(keystream)
  25.  
  26. # Encrypt / decrypt stdin to stdout
  27. plaintext = sys.stdin.buffer.read(N_BYTES)
  28. while plaintext:
  29.   sys.stdout.buffer.write((
  30.     int.from_bytes(plaintext,'little') ^ keystream
  31.   ).to_bytes(N_BYTES,'little'))
  32.   keystream = next(keystream)
  33.   plaintext = sys.stdin.buffer.read(N_BYTES)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement