Turing Bombe Model

This page contains a zip file with C++ source code which I believe to be a reasonably reprasentative model of the Turing Bombe which was used at Bletchley Park in WWII to find the settings for the German Enigma machine.

1999 update: The (latest version) simulator works successfully with several of the BP Test Menus published on the BP Mailing list by Phil Marks. The simulator has also been updated to improve its ability to have turnover positions configured into its menu and also to handle the BP 'Teleprinter' form of menu which appears to be the wartime 'standard' way of specifying menus.

Some of the test menus cause incorrect results with this simulator for reasons I havent yet had time to delve into. Nevertheless, the simulator was used successfully in 1998 to solve a real enigma message posted by Tony Sale to the BP Mailing List.

To use the model, you will need a C++ compiler for your machine with which to compile it. You can then run any arbitrary text through the model to attempt to find the settings. Here is a sample command line:-

    bombe 
THERAININSPAINSTAYSMAINLYONTHEPLANE ZXRQNLEAWAGHZFRDNVCZRKDUXMPHRHGUWZL x.x.x.xx.x..x.xxt...x.x

This is taken from an E-Mail correspondence between Nik Shaylor and Tony Sale. The correct answer is Wheel order 321, Ringstellung 'AAA', Start position 'AAA', Steckers AB CD EF GH IJ

To download the source code click here

User & Performance Notes

This application is known to compile with Microsoft Visual C++ 5.0 Earlier versions were compiled with V4.2. Settings are as follows:-

    Macros - NDEBUG,WIN32,_CONSOLE,NOMINMAX,_AFXDLL,_MBCS
    Code generation - multithreaded DLL RTL
    Optimise for maximised speed

STL Containers are used in several places. If your compiler does not support STL, you will need to find another collection class to use.

This file can be compiled in several configurations by changing the #define lines. The following are known to work:-

    DIAGONAL_BOARD - Turing Bombe, Diagonal Board, No shortcuts
    DIAGONAL_BOARD,TURING_SHORTCUT - as above, Turing shortcut (approx 26 times
        faster than without shortcut). This involves checking for 1 or 25 steckers
        implied by an input hypothesis.
    DIAGONAL_BOARD,CARLSON_SHORTCUT - 5 times faster (in software) than Turing
        Shortcut. This is a shortcut which is only helpful in software implementations.
    	It involves rejecting a hypothesis as soon as a single stecker conflict is 
    	detected.

Menus are configured automatically. The user supplies the plain and cyphertext as command line arguments, together with an optional mask indicating which character positions are to be included in the menu. Use 'x' to include a character, anything else (e.g. '.' to exclude). If no mask is supplied, the first 12 characters will be used.

The character 't' in the mask is used to indicate the first character in the menu after an assumed turnover position.

The Model can also use the Bletchley Park 'teleprinter' form for setting up menus. In this form a series of 4 letter groups are supplied, the first two indicating plain and cypher letters and the next two the offset in the menu. The first turnover is between offsets ZZ/AA, the next between AZ/BA etc.

To use the 'teleprinter' form, specify the four letter groups (with spaces between them) as command line parameters (there must be more than 3 groups)

Optional Arguments are as follows:-

    -bp     - Use Bletchley Park Bombe wheel configuration (default is to use the 
              German configuration, which is easier to test on the Enigma Simulator)
    -daw    - Dump all wheel indicators for each stop (default is to dump just the 
              first set of indicators)
    -woNNN  - Process wheel order NNN only
    -woxNNN - Exclude any wheel order containing ANY of wheels NNN in the 
              corresponding positions e.g. -wox123 would exclude 154, 524, 543 
              but not 514 etc.
    Some timings on a 166MHz Pentium MMX with 80Mb RAM under NT 4.0:-

    CT:   ZXRQNLEAWAGHZFRDNVCZRKDUXMPHRHGUWZL
    PT:   THERAININSPAINSTAYSMAINLYONTHEPLANE
    MASK: x...x..x.x..x.xxx...x.x

    For wheel order 321 only:-

      Diagonal Board, no shortcuts:-
      AAA AB CD IJ NN RR SS TT ZZ 
      258528355 chars in 913 seconds

      Turing Shortcut:-
      AAA AB CD IJ NN RR SS TT ZZ 
      9938575 chars in 34 seconds

      Carlson Shortcut:-
      AAA AB CD IJ NN RR SS TT ZZ 
      1608085 chars in 6 seconds

    For all orders of 5 wheels (60 orders):-

      Turing Shortcut:-
      596695340 chars in 2104 seconds
      55 stops

      Carlson Shortcut:-
      96399748 chars in 393 seconds
      55 stops

    With a better menu...

    CT:   ZXRQNLEAWAGHZFRDNVCZRKDUXMPHRHGUWZL
    PT:   THERAININSPAINSTAYSMAINLYONTHEPLANE
    MASK: x.x.x.xx.x..x.xxx...x.x

      ...
      Testing 3 2 1
      AAA AB CD EF IJ NN RR SS TT ZZ 
      ...
      107027861 chars in 460 seconds
	  1 stop

Related Sites

John Harper's Turing Bombe Pages and the Bombe Rebuild Project
Nik Shaylor's C++ and Java Simulations and a description of how the Bombe worked.


Copyright (c) 1997-2000, Andy Carlson. All rights reserved.

Back to 'About Enigma and its Decryption' - Back to Enigma Applet