CSP-889/2900 Emulation

Sorry, your browser is not capable of running a Java applet.

(Free Sun Java download.)

The Java language source code to ECM Applet. The beginning of the source also lists any known bugs, planned changes, etc.

This program emulates the operation of an ECM Mark II model CSP 889/2900 (a.k.a. SIGABA). More information on this machine may be found on the ECM Mark II page. This program and its source code are provided for the benefit of cryptologic history researchers, it is not recommended that this algorithm be used for modern cryptography.

Also note that Geoff Sullivan has written a Windows based simulation that has better aesthetics and the same algorithm, take a look at: http://www.hut-six.co.uk/, Joe Dunn created a command line version: https://github.com/JoeDunnStable/sigaba.

To properly encrypt or decrypt you really need to have keying instructions. For example, CSP-1100 ECM Instructions, or SIGABA instructions. The short note below will allow you to see how the machine operates:

Change the Zeroize/Operate choice to Operate. Note the non-functional middle position mimics the middle position of the real machine. The controls of this program do not look like the controls on the real machine, but they work the same. This includes many of the oddities of the real machine that could cause accidental errors, slow you down, etc.
Change the CSP 889/CSP 2900 choice to CSP 889. Note on the real machine you must not only avoid the non-functioning middle position, but also a second knob must be changed to match 889 or 2900.
Change the master switch to:

O for Off, not very interesting.
P for Plain text, what you type gets printed.
R for Reset position. Use the 1-5 keys to set the control rotors to a key.
E for Encrypt
D for Decrypt

Note on the real machine the master switch is a rotary switch that does not allow moving from P to E without first passing R. If you want the behavior of this program to most closely match the real machine, use the control in such a way that you stop at each item in the control when moving between items.

Zeroizing Rotors Change the Zeroize/Operate choice to Zeroize and the Master Switch to R (reset). Then repeatedly press the Blank key until all the cipher and control rotors are O.

This program allows you to simulate manually rotating the rotors by editing the rotor position displays. You must press return after you change any position. If you do not enter a valid set of positions, default (zeroized) values will be filled in.

The real machine does not have a Tear Tape button, this is provided as a convenience to computer operators. The tape cannot be modified, but it can be copied to the clipboard.

The RPT (repeat) button is not implemented in this version of the program.

The rotors used are hardwired in the source code. This is the equivalent of having only one rotor set and was true during most of the war. The order of the rotors maybe be selected with Applet parameters. An example is in this html page:
param name = "cipherOrder" value = "0N1N2N3N4N"
param name = "controlOrder" value = "5N6N7N8N9N"
param name = "indexOrder" value = "0N1N2N3N4N"
The parameters each must be 10 characters long. The numbers are the rotor numbers, there are ten different large rotors that can be used interchangeably between the cipher and control banks. No check is made to prevent re-using a rotor, but this would be impossible with the real rotors.
There are 5 different index rotors that are almost always positioned 1-5 as specified.
The N indicates that the rotor is inserted into the machine with the letters legible (normal orientation.) Changing N to R indicates the rotor is inserted reversed. If there are any errors in the parameters, the rotor order is corrected to match the example above.

Anyone interested in helping to improve the user interface is especially invited to drop us a note.

Return to the ECM Mark II page.


Copyright © 2006-2019, Maritime Park Association
All Rights Reserved
Legal Notices and Privacy Policy
Version 2.05, 23 Aug 2019