Monday, October 12, 2015

Projects made with the Arduino Enigma Simulator Engine

The availability of a correct Free Open Source implementation for the Arduino platform of the Enigma encryption algorithm and the Uhr switch has inspired the following people to write their own enigma simulators. To this day, the most popular page on this blog is this:
What will you be inspired to make with it?

le Sanglier des Ardennes Page:

Source code:

Box sketch:

Claudio's Page:

Details about his Enigma Simulator:

Simulator source code:

Wednesday, August 19, 2015

Break this message, win USD $1000

Enigma encrypted messages have been broken before. There are certain properties of the machine that make this possible.

The enigma machine produces more secure messages if a message is encrypted once and then encrypted again, The fundamental weakness of the enigma machine is that a letter can never encrypt to itself. By encrypting a message twice with different settings, a letter in the clear text can encrypt to itself in the second round.

The following message has been encrypted twice with different settings on an M4 machine with an Uhr switch. No further technical help will be provided.

This is going to be called the #Enigma1KChallenge


The first person to fully decode it and follow the instructions will have $1000 sent via PayPal to them. No purchase necessary, void where prohibited by law, residents of jurisdictions where this would not be legal or restricted are not eligible to win. All laws and regulations apply. Any taxes are the responsibility of the winner.

You can use the following enigma engine or any other correct implementation:

Good luck.

Tuesday, August 18, 2015

Entered the Enigma Machine Simulator into The 2015 Hackaday Prize, Best Product competition

The Arduino Enigma Machine Simulator has been submitted for the The 2015 Hackaday Prize and Best Product competition. Three units, serial numbers HaD0001, HaD0002 and HaD0003 were built and submitted to SupplyFrame so they can be evaluated.

Tuesday, June 30, 2015

Acrylic Case Assembly Notes

These are the assembly notes for the acrylic case, available at:

The acrylic case is the same dimension as the wooden case and it puts together in a similar way.

Please review the assembly instructions for the wood case first.

In this project we use Loctite Go2 Gel for the case and Elmer's Glue-All to attach the Merkblatt to the lid.

Before starting to glue the case, the Arduino must be given some standoffs first. The bottom of the Arduino is not flat. The pins for the USB and 9V Power connectors in the front are taller than the pins in the back.

In the wooden case, a folded post-it note is used as a shim, but this solution cannot be used here because the case is transparent.

The standoffs are created from the unused acrylic piece where the parts are cut from. Locate a thin piece separating the bottom lid sides and break it off. Break this part into small rectangles and sand them smooth. The exact dimensions of the standoff pieces are not critical because we will be using their thickness to raise the bottom of the arduino. They will be laying down on their 3mm side.

Once you have 4 standoffs, apply a little Go2 Gel to each one and glue them to the bottom of the Arduino. They will glue to the PCB. One will go to the left of the infinity arduino logo on the top left corner. Another will go to the left of the ROHS compliant statement. The next one will go on the top right corner above the USB connector. The last one will go on the bottom right corner, clear of the power connector.

Once this step is completed, the case can be assembled in a similar fashion to the wooden one, except that this glue does not require water. Use a little Go2 Gel in each pocket, if you use too much it will get squeezed out. Work clean. Try not to get glue or fingerprint on the sides. There is no way to hide mistakes here...

Once the case is glued, apply hair bands to keep it together. The curing period for this glue is 24 Hours. It does not melt the plastic, but it forms a strong bond. If any glue is squeezed out of the case, you can pry it off after it cures.

To glue the instructions to the lid, use the Elmer's Glue-All, print out an instruction sheet and cut it down to size. Apply glue to the back and place it in the lid in the desired position. The glue will show through the back, you can use the scrap piece of acrylic to practice your gluing technique. If a mistake is made, the instruction sheet and the glue can be removed by getting it wet and rubbing it off. It will remove clean and leave no trace.

This case is the right dimension to accept the Housework 1131 hinges, but I have not found a way to nail the hinges to the case yet.

Tuesday, May 26, 2015

New Case Material for Enigma Simulator: Acrylic

A customer asked if the case could be made of clear plastic. Ponoko offers 3mm thick clear acrylic. The case was laser cut in this material. It looks gorgeous,

This is how it looks with the electronics installed. Shown is the Enigma Color Configuration Tool. A little project being worked on that allows all the colors in the Enigma Simulator to be changed. Do you want a sim in night vision red? A few keystrokes will make that happen.

The clear case is available at:

Clear acrylic glue is needed to put this together. This should work:

Saturday, April 25, 2015

Enigma Warning Placards - Zur Beachtung and Merkblatt-M

The original instruction sheet and warning placards for the Enigma machines have been recreated in a scale appropriate for the Arduino Enigma Simulator. They were printed in regular white paper and attached using Elmer's Glue-All to the inside lid.

When added to this case, it starts getting very realistic.

You can download the Zur Beachtung.rtf and Merkblatt.rtf files. The sources for the text have been linked in each file.

Thanks to davedarko for pointing out that some of the ( f ) in the text were actually long s ( ſ ). The files have now been updated.

Tuesday, January 13, 2015

Product Specifications

These are the specifications for the Miniature Arduino Enigma Machine Simulator.
It has been called "probably the tiniest practical digital Enigma simulation."

Machines Emulated:
Enigma I, M3, M4

Entry Contacts (ETW):

Reflectors (UKW):

1: EKMFLGDQVZNTOWYHXUSPAIBRCJ, steps next wheel on Q-R transition.
2: AJDKSIRUXBLHWTMCQGZNPYFVOE, steps next wheel on E-F transition.
3: BDFHJLCPRTXVZNYEIWGAKMUSQO, steps next wheel on V-W transition.
4: ESOVPZJAYQUIRHXLNFTGKDCMWB, steps next wheel on J-K transition.
5: VZBRGITYUPSDNHLXAWMJQOFECK, steps next wheel on Z-A transition.
6: JPGVOUMFYQBENHZRDKASXLICTW, steps next wheel on Z-A and M-N transitions.
7: NZJHGRCXMYSWBOUFAIVLPEKQDT, steps next wheel on Z-A and M-N transitions.
8: FKQHTLXOCBJSPDZRAMEWNIUYGV, steps next wheel on Z-A and M-N transitions.

Additional Rotors (Greek Wheels):
Can only be used in M4 machines next to thin reflectors B & C. They do not step.

The four rotor M4 machine can be made compatible with an M3 machine with a full size B reflector by selecting the thin B reflector and the Beta wheel in the A position. The M3 full size C reflector can be emulated in the M4 machine with the thin C reflector and the Gamma wheel in the A position.

Thus, the full size B and C reflectors can be redefined (re-wired) without losing compatibility with M3 machines. You will only be able to communicate with other machines with the same reflector wiring. If this academic possibility interest you, contact us for details.

Stepping Mechanism: 
Levers and Notches. The middle rotor double stepping anomaly is simulated correctly. See

Up to 13 plugs can be installed to swap the letters as they go from the keyboard to the rotor field and also when coming out from the rotor field to the lamps. When exactly 10 plugs are installed, the Uhr switch is enabled. The plugs perform a symmetrical substitution. If a plug between A and Z is installed. if A is typed, it will be converted by the plug into a Z going into the rotors. If a letter is encoded into an A, the plug will turn it into a Z going out to the lamps.

Uhr Switch:
An external attachment that connected to the plugboard via 20 plugs, 10 red (a1..a10) , 10 black (b1..b10). A big dial allowed selection of 40 settings: 00..39. Emulates traditional plugs at setting 00, performs symmetrical substitutions at settings that were multiples of 4 (4,8,12...) and different asymmetrical substitution ie: A->Z but Z->G at all other settings.
For more information:

Yes, a paper tape runs in between the rotors and the lamp field, the tape can be cut by touching it's rightmost part. Printing groups are selectable (continuous, 4,5,6 letters). Can also be disabled for a genuine experience.

External control:
Yes, through a USB virtual serial port. The wheel position can be set and letters sent to be encoded. Encoded characters are printed in groups, if the printer option is set to 4, 5, or 6.

Keyboard layout:
Old german qwert

Can be powered up with a 9V battery and the included plug or connected to the computer with a A-B usb cable (not included)

(counting wood case, plywood is 3.2mm (0.126") thick)
Width: 60.9mm (2.3975")
Length:78.3mm (3.083")
Height of bottom half: 24.9mm (0.980")

Contents of Package:
-Arduino Uno R3
-Seeed Studio 2.8" TFT Touch Shield V2.0 SKU: SLD10261P
-Laser cut case, made from 3.2mm Birch plywood with engraved Enigma logo
-9V to Battery Clip to Plug Barrel Jack
-9V Battery
-Welcome message (encrypted of course)

Monday, January 12, 2015

Operating the Arduino Enigma Machine via Serial Port

This guide shows how to operate the Arduino Enigma Machine from a computer via serial port. The following instructions can be followed with the touchscreen simulator or with the arduino sketch provided in the post titled Source Code for implementation of Arduino Enigma Algorithm thru Serial Port.

To start, find the Arduino logo on the desktop and double click it.
With no Arduinos plugged in, the list of existing serial ports are shown,
After an Arduino is connected to the computer, Windows will automatically install the USB driver and assign it a serial port. Click on Tools->Port and select the new serial port.

WARNING: From here, you can upload a blank sketch to your simulator if you click the right facing arrow next to the checkmark.

If this happens to you, don't worry, simply contact us at the gmail address shown on the Contact section on the right panel.

You will receive an installer to restore the firmware for the latest enigma program on your machine.

Once the right serial port is selected, press Ctrl+Shift+M or click on Tools->Serial Monitor

Ensure the baud rate on the lower hand right corner is set to 9600.

By default, the machine is set to verbose mode, where the actual rotor wiring and internal path is shown. The rotor types can be seen in the LCD with the machine open. The word TEST was typed. It encodes to EWVY.
To change the machine from Verbose to Encode, first open it by clicking on the Enigma Logo.
Once the machine is open, the reflector, rotor types, ring settings and machine configuration options can be changed.

Touch "SERIAL:" until it changes to "C"

The machine will now accept text to encode thru the serial port. The other options are NO, for no operation and V, for verbose.

The printer groups will affect how many characters are grouped together in the paper tape running above the lamp field as well as the characters returned through the serial port. The machine will now print four (4) characters, then a space.
Once the desired configuration is set, touch the words "CLOSE" or the handle on the upper left hand corner to close the machine.

These are just the steps needed to change the serial port operation.

To see how to change all the settings of the machine, please consult the users guide.
The settings for this example are:
Reflector C Thin
Greek Rotor Beta
Rotors 2,1,3

To set the starting rotor position to ABGI, send !abgi. If a three rotor machine was selected, the rotors would be set to ABG and I would be encoded.Uppercase and lowercase are treated the same.
To encode something, type in the upper text box and click "Send".

The word "TEST" is going to be sent for encoding
Test was encoded to EWVY as shown at the bottom of the screen.

Next the words "OF THE ENIGMA MACHINE SIMULATOR" are going to be sent for encoding. Lower-case and upper-case characters are treated the same, any characters not in the Enigma Machine keyboard like numbers, symbols, space, are ignored.
The rest of the phrase was encoded and every four (4) characters, a space was inserted. Any additional characters be added to the current line.

We are now going to change the wheel positions back to ABGI by sending !abgi
When the wheel position is set with the ! command, a new line will be started. The string "TEST OF THE ENIGMA MACHINE SIMULATOR" was sent in one line. The result matches the line above where the phrase was sent in two parts.

Using the serial port, a division of duties can be established. If physical access to the machine is controlled, the person working through the serial port has operator access, where the wheels can be set and characters encoded, but internal settings cannot be changed. The person(s) that have physical access to the machine have officer access where all the settings can be changed.

Installing the Arduino IDE and Serial Port USB Drivers.

Before the Arduino Enigma Machine Simulator can be controlled from a computer, the Virtual Serial Port USB drivers must be installed. A terminal program is also needed to interact with the machine. Installing the Arduino IDE satisfies both requirements.

First, go to then click on Download. I selected the windows installer for version 1.5.8 of the IDE, then clicked on the file that was downloaded.

Windows throws a security warning to make sure we intend to execute this, click "Run"

Click on "I Agree" to Accept the License Agreement.
We are going to leave the default options alone. Notice the second option is install USB driver.
Click "Next"
Leave the default folder alone.
Click "Install"
And now we wait...
Windows shows the following security message before installing the USB drivers.
Click "Continue Anyway"
The installation is now completed.
Click "Close"

Find the Arduino icon on the desktop and double click it.

Leave the Arduino unplugged.

Under Tools->Port you will see the existing serial ports your computer has.

Plug the Arduino board. Windows will find it, install the driver and assign it a serial port.

The new port for this Arduino device is shown.

This is a one time setup. To operate the enigma machine, continue to the next post, Operating the Arduino Enigma Machine via Serial Port

Sunday, January 4, 2015

Wood Case Assembly Instructions

These are the assembly instructions for the laser cut wood case that comes with the Arduino Enigma Machine Simulator.

Read this instruction guide completely before beginning assembly. If you have any questions, write us at the gmail address listed on the Contact section to the right of this post.

Spare cases can be purchased at our Ponoko store:

Extra materials needed, not supplied in kit:

-Gorilla Glue to assemble the case
-Elmer's Glue-All to glue the Merkblatt to the upper lid
-Hair bands or twine (to keep the case together while the glue cures
-Post-it (as a shim to raise the rear part of the arduino inside the case)
-Houseworks 1131 hinge (1 pack) (
-Small chain from hobby shop to hold the upper lid partially open.

This is what the finished product will look like.

The first step is to take out the device from an already assembled case. To do so, the left and right joints in the front panel were cut with the saw attachment in a Leatherman Multi Tool. The whole corner does not need to be destroyed, see the left corner for the amount of material to be removed. Once the corner is cut at a 45 degree angle, the front panel will pull off.

This step is optional and can be skipped.
 Next, arrange all the pieces for the bottom case in the correct order. The pieces can be identified by the unique shape of the corner teeth.

For the bottom half of the case, use the big piece without the laser engraved logo.

The two big pieces are identical. If you use the laser engraved one here, the logo will be hidden under the arduino and the inside of the top half of the case will be plain.

Notice the folded post-it. This is used to raise the rear part of the arduino so it sits level inside the case.
 The bottom of the arduino is not flat. The USB and power connector leads stick out from the PCB farther than the header pins. A folded post-it is used to raise the rear part of the arduino to the same height as the front.

The post-it was folded in half so that the adhesive strip was on the outside and then folded in half in the other direction two times.

The adhesive will keep it in place once the case is assembled.
Now is the time to test-fit the case to the arduino. At this point, a hair band was used to squeeze the pieces in to make sure there are no gaps in the corner joints.

No way to avoid the camera reflection in the glass. Can you identify the camera model?
 A corner shot, everything is fitting tight and neat.
Next, the wood needs to be moist for the Gorilla Glue to work properly. Put enough water in a disposable plate to completely cover the teeth. We do not want to get this whole piece wet, the arduino sits in it. The arduino should not be powered up for at least two hours after the case is glued to allow the wood to dry.

One at a time, moist all the fingers in all the pieces. Keep the fingers submerged for about 30 seconds.

Tip: by scraping the wood piece against the plate while it is submerged, the laser burn marks are removed.

As the pieces are wetted, they get returned back to their position.

At this point, a chain will be nailed down into the left piece. The other end will be nailed later into the upper piece and it will hold it partially open.

The nail needs to be above the touchscreen PCB. Test fit the case around the pcb to determine the depth of the pocket. The pocket has been measured to be 3.2mm deep. The nail can be driven 2mm to the right of the edge.

The nail will go where the red star is shown on the left piece.
Another test fit with the moist pieces, to ensure everything still fits.
 We are using Gorilla Glue. It is similar to Elmer's wood glue. They both need the surfaces to be moist to work and expand while curing.
 There is no going back now, apply a thin bead of glue to the inside of the teeth of the four side pieces. Do not worry about the space in between teeth, this glue expands.

Do not apply glue to the bottom piece. The four side pieces will glue to it.

The front panel is shown after glue is applied. The other three side pieces will look the same. As each piece is glued, put them back in their position.

Do not get glue on the LCD screen. If the protector film is still applied, you are in good shape. If not, clean it immediately.
Apply a lot of hair bands or twine to keep the case from expanding apart. The glue will expand and try to push the joints open. Keep the case like this for two hours after the glue is applied. This will allow the glue to cure and the wood to dry.
How the underside of the case looks while the glue is setting.

After a minimum of two hours, the hair bands are removed. The case joints are tight and the arduino powers up.
A corner shot showing the joints are tight and how the logo looks.

Showing how the lower case pieces fit together.
The floor plate on the lower case will have an engraved enigma logo that will be hidden from view.

Showing how the upper pieces fit together. You will receive two pieces with the engraved enigma logo, one small, one large. Shown here is the small logo. At the bottom of the post, a case with the big logo is shown. Select one that will be visible. The other unwanted one will be used as the floor plate on the lower case and will be hidden.

The pocket for the hinges was filed down by hand in this prototype. You will receive a laser cut piece. The case at the bottom of the post was assembled with all laser cut pieces.

The hinges shown are Houseworks 1131
 Grab a nail with some fine tip pliers.
 Another shot showing how the nail is held.
Place the hinge into the pocket and drive the nail down into the plywood. It will go into the middle layer and will go in smoothly. Be careful to drive it down vertically so it does not split the wood.
 The upper hinges are installed.
Align the top part with the bottom case and drive the nails down. Be careful with the glass screen, protect it, The hand that is used to hold the bottom case in place can go over the screen to protect it.

At this point, the other end of the chain can be nailed to the inside of the left side of the upper lid. See the bottom picture for details.
Showing the rear of the case.
Showing how the hinges fit in a pocket and the alignment of the upper and lower pieces.

A fully assembled Arduino Enigma Simulator. The attachment point for the chain on the lower case is shown.
Another assembled Enigma Simulator, serial Had 0001, entered in the Hackaday best product prize competition.

This one shows the Merkblatt (Instruction sheet) glued to the inside of the upper lid.

A serialized Merkblatt ships out with all simulators.