artemis-beta / enigma

Emulator of the Enigma Encoding Machine

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ENIGMA

python3.9 python3.10 python3.11 python3.12

CodeFactorGitHub codecov

This is a small application written in python which simulates both the M3 and M4, 3 and 4 rotor variants of the Enigma machine which was utilised by German forces during WWII to encode information.

Included are two example scripts which can be found in the examples folder, these demonstrate the two variants.

For the C++ version of this application visit here.

Installation

To install simply run:

pip install .

within the repository directory.

Executable

After installing the module the command enigma is available within the terminal and can be used to launch a demonstration application.

Custom Machine

To create a new instance of Enigma the default can be used which is an M3 instance with pre-selected rotor arrangement and reflector choice, or all settings can be chosen by the user. Note as with the machine itself, one of the 8 numbered rotor types may only be selected once:

my_rotor_list = [1,4,6,3]     # 3 or 4 of 1,2,3,4,5,6,7,8
my_reflector  = 'B'           # 'B' or 'C'
machine_type  = 'M4'          # 'M3' or 'M4' (should match rotor list)
debug_level   = 'ERROR'       # 'ERROR', 'INFO', 'DEBUG' (see python 'logging' module documentation)

enigma = enigma.Enigma( rotor_list     = my_rotor_list ,
                        user_reflector = my_reflector  ,
                        enigma_type    = machine_type  ,
                        debug          = debug_level)

enigma.ringstellung('right', 2)  # Perform an internal wire rotation on the right rotor of 2 steps 
                                 # for M3 rotors are ['left', 'middle', 'right']
                                 # for M4 rotors are ['left', 'middle left', 'middle right', 'right']

enigma.set_key('NERO')
enigma.type_phrase('NOBODYEXPECTSTHESPANISHINQUISITION')

About

Emulator of the Enigma Encoding Machine

License:GNU General Public License v3.0


Languages

Language:Python 100.0%