Source

pyEnigma / pyenigma / cypher_enigma_safe.py

#! /usr/bin/env python
#-*- coding: utf-8 -*-

import sys

from rotor import *
from enigma import *

"""A trivial and minimaliste CLI.
"""

def usage():
    print("Usage:")
    print('\techo "Hello World" | ./cypher_enigma_safe.py ABC ref rotor1 rotor2 rotor3 plugboard')
    print("\nExample:")
    print('\t$ echo "Hello World" | ./cypher_enigma_safe.py ABC A  I II III "AV BS CG DL FU HZ IN KM OW RX"')
    print("\tImweq Ltzda")

if __name__ == "__main__":
    # Point of entry in execution mode
    try:
        key = sys.argv[1]
        ref = sys.argv[2]
        r1 = sys.argv[3]
        r2 = sys.argv[4]
        r3 = sys.argv[5]
        plugs = sys.argv[6]
    except:
        usage()
        exit()
    raw = sys.stdin.read(-1)

    rotors = { \
          "I":ROTOR_I,"II":ROTOR_II,"III":ROTOR_III,"IV":ROTOR_IV, \
          "V":ROTOR_V,"VI":ROTOR_VI,"VII":ROTOR_VII \
          }
    reflectors = { \
          "A":ROTOR_Reflector_A,"B":ROTOR_Reflector_B, \
          "C":ROTOR_Reflector_C \
          }

    engr = Enigma(reflectors[ref], rotors[r1], rotors[r2], rotors[r3], key=key, plugs=plugs)
    res = engr.encipher(raw)
    print(res)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.