Git Product home page Git Product logo

python-enigma's Introduction

python-enigma: Engima Machines, But With Python

This project introduces a package, python_enigma, with an enigma module which can be imported and used to include Enigma-Machine-like encryption to your python project. Also included is a simplistic "Hello World" proof of concept, a basic catalogue of rotors in the jason format expected (catalogue.json), and a convenience script for preparing the catalogue from a csv.

Security Notice

In the age of gigahertz pocket computing, the Enigma cipher is useful as a point of curiosity only. None of the original security flaws with the Enigma machine as patented have been corrected.

Historical Accuracy Notice

While pains were taken to ensure the interoperability of this emulator and the actual enigma machine, nothing about the module enforces historical accuracy in terms of the use of particular parts or settings, or the "tidying" features of the operator.

In particular, this model allows for an aribtrary number of wheels to be used, some of which were not historically used together. All wheels obey an M3/M4-style "double stepping" movement pattern. The smoother gearbox stepping patterns of some later models are not emulated.

Making use

The principle way to use the Enigma module in your scripts is to import and invoke the Enigma class. For convenience, you can read in the string "default" as the catalog list to use the stock catalog included in the module.

The Enigma class accepts the following arguments on initialization:

  • catalog: a dictionary of rotor bindings, or the string "default" to use the stock bindings included in the module.
  • stecker: A space-seperated string of bindings to use for the steckerboard settings. Ex, "AB CD" means that stecker cables are set between A and B, and C and D.
  • rotors: a list of tuples showing the rotor name from the catalog and the desired ringstellung letter setting, ex [("III", "D"),]. Any number of rotors may be used, including duplicates.
  • reflector: a string indicating the name of the rotor from the rotor catalogue which you would like to use for the reflector, ex 'Reflector B'.
  • operator: if True, the operator class will be used. This strips unprintable characters from the message and cuts the message into 5-character chunks.
  • word_length: overrides the length of the words used by the operator.
  • stator: accepts "military" or "civilian", to imitate either the direct encoding of the military version of the device or the QWERTZ encoding used in the civilian model.

Use of the Enigma class provides a variety of convenience methods:

  • set_wheels: accepts a string of wheel positions (as read left to right) and applies them to be the message setting. Should be called before every parse call.
  • set_stecker: if desirable, one could override the steckerboard settings after instantiating the entire machine.
  • parse: parses the string provided and returns that message as though it were processed through an actual Enigma Machine.

python-enigma's People

Contributors

barrowsys avatar zadammac avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

python-enigma's Issues

Incorrect output with certain settings

There appears to be an issue with some combinations of rotors.
For example the code below gives the output as ECPRX LNMBQ.

from python_enigma import enigma
ciphertext = "HELLO WORLD"
plugs="AS LK DE FV GJ CU MW OT PX RZ" 
rotors = [("II", "A"), ("IV", "B"), ("III", "C")] 
machine = enigma.Enigma(catalog="default", stecker=plugs,
                    rotors=rotors, reflector="Reflector B", operator=True, word_length=5, stator="military")
machine.set_wheels("EFC")
plain=machine.parse(ciphertext)
print(plain)

Whereas if you run it through other tools you get an output of CVHFJ PBKYK.

This is using python3. Am I doing something wrong?

catalogue.json not found in the module

where is the catatague.json that is supposed to be in the module ?
i can not instanciate object enigma because is not there

i installed python-enigma with pip

Could you provide some code example ?

thread Safe

hello,

is this package thread safe ?
I get error when running multiple machin in thread

[BUG] Module May not Be M4/Enigma Compliant

Describe the bug
User Michael Zimmermann [email protected] reported that he was having trouble decrypting a known-plaintext message generated on an original Enigma M4. This message was originally produced during the war and is fully decryptable using other emulation platforms.

To Reproduce
Steps to reproduce the behavior:

  1. Create an enigma machine instance with the appropriate settings (detailed below)
  2. Set the wheelpack correctly.
  3. Parse the encrypted message.
  4. If reproducing, the wrong plaintext is sent.

Expected behavior
A new key should be generated and written to configuration, and that key should be used throughout the rest of the backup process.

Log/Console Output
Where possible, add the output of the Logs or Console when the problem occurs.

Desktop (please complete the following information):

  • Not obtained. There's nothing platform-specific in this machine so... shouldn't matter.

Additional context
Add any other context about the problem here.

Reflector: C
Greek: B
Wheels: 568
Wheel positions: YOSZ
Rings: AAEL
Plugs: AE BF CM DQ HU JN LX PR SZ VW

Message indicator groups: DUHF TETO

Ciphertext (without indicator groups):
LANOTCTOUARBBFPMHPHGCZXTDYGAHGUFXGEWKBLKGJWLQXXTGPJJAVTOYJFGSLPPQIHZFXOEBWIIEKFZLCLOAQJULJOYHSSMBBGWHZANVOIIPYRBRTDJQDJJOQKCXWDNBBTYVXLYTAPGVEATXSONPNYNQFUDBBHHVWEPYEYDOHNLXKZDNWRHDUWUJUMWWVIIWZXIVIUQDRHYMNCYEFUAPNHOTKHKGDNPSAKNUAGHJZSMJBMHVTREQEDGXHLZWIFUSKDQVELNMIMITHBHDBWVHDFYHJOQIHORTDJDBWXEMEAYXGYQXOHFDMYUXXNOJAZRSGHPLWMLRECWWUTLRTTVLBHYOORGLGOWUXNXHMHYFAACQEKTHSJW

Plaintext:

KRKRALLEXXFOLGENDESISTSOFORTBEKANNTZUGEBENXXICHHABEFOLGENDENBEFEHLERHALTENXXJANSTERLEDESBISHERIGXNREICHSMARSCHALLSJGOERINGJSETZTDERFUEHRERSIEYHVRRGRZSSADMIRALYALSSEINENNACHFOLGEREINXSCHRIFTLSCHEVOLLMACHTUNTERWEGSXABSOFORTSOLLENSIESAEMTLICHEMASSNAHMENVERFUEGENYDIESICHAUSDERGEGENWAERTIGENLAGEERGEBENXGEZXREICHSLEITEIKKTULPEKKJBORMANNJXXOBXDXMMMDURNHFKSTXKOMXADMXUUUBOOIEXKP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.