crypto-enigma
An Enigma machine simulator with display.
https://github.com/orome/crypto-enigma-hs
Version on this page: | 0.0.2.10 |
LTS Haskell 21.25: | 0.1.1.6@rev:7 |
Stackage Nightly 2023-06-21: | 0.1.1.6@rev:7 |
Latest on Hackage: | 0.1.1.6@rev:7 |
crypto-enigma-0.0.2.10@sha256:52a3ae5f41a931cacf7f7ca32bf5c5ef2b2ab26872920d51bbfdeaadf0f82777,3447
Module documentation for 0.0.2.10
crypto-enigma
An Enigma machine simulator with state and encoding display.
Currently support is only provided for those machine models in most widespread general use during the war years: the I, M3, and M4.
This is adapted, as an exercise in learning Haskell, from an earlier learning project written in Mathematica. It is my first Haskell program. A Python version with substantially the same API, plus a command line interface, is also available.
Functionality
Perform message encoding:
>>> enigmaEncoding (configEnigma "b-γ-V-VIII-II" "LFAP" "UX.MO.KZ.AY.EF.PL" "03.17.04.11") "KRIEG"
"GOWNW"
>>> let cfg = configEnigma "c-β-V-VI-VIII" "CDTJ" "AE.BF.CM.DQ.HU.JN.LX.PR.SZ.VW" "05.16.05.12"
>>> putStr $ showEnigmaEncoding cfg "FOLGENDES IST SOFORT BEKANNTZUGEBEN"
RBBF PMHP HGCZ XTDY GAHG UFXG EWKB LKGJ
Show configuration details:
>>> let cfg = configEnigma "b-γ-V-VIII-II" "LFAP" "UX.MO.KZ.AY.EF.PL" "03.17.04.11"
>>> putStr $ showEnigmaConfigInternal cfg 'K'
K > ABCDEFGHIJK̲̅LMNOPQRSTUVWXYZ
P YBCDFEGHIJZ̲̅PONMLQRSTXVWUAK UX.MO.KZ.AY.EF.PL
1 LORVFBQNGWKATHJSZPIYUDXEMC̲̅ Q 07 II
2 BJY̲̅INTKWOARFEMVSGCUDPHZQLX A 24 VIII
3 ILHXUBZQPNVGKMCRTEJFADOYS̲̅W F 16 V
4 YDSKZPTNCHGQOMXAUWJ̲̅FBRELVI L 10 γ
R ENKQAUYWJI̲̅COPBLMDXZVFTHRGS b
4 PUIBWTKJZ̲̅SDXNHMFLVCGQYROAE γ
3 UFOVRTLCASMBNJWIHPYQEKZDXG̲̅ V
2 JARTMLQ̲̅VDBGYNEIUXKPFSOHZCW VIII
1 LFZVXEINSOKAYHBRG̲̅CPMUDJWTQ II
P YBCDFEG̲̅HIJZPONMLQRSTXVWUAK UX.MO.KZ.AY.EF.PL
G < CMAWFEKLNVG̲̅HBIUYTXZQOJDRPS
Simulate machine operation:
>>> let cfg = configEnigma "b-γ-V-VIII-II" "LFAP" "UX.MO.KZ.AY.EF.PL" "03.17.04.11"
>>> putStr $ showEnigmaOperation cfg "KRIEG"
OHNKJYSBTEDMLCARWPGIXZQUFV LFAP 10 16 24 06
K > CMAWFEKLNVG̲̅HBIUYTXZQOJDRPS LFAQ 10 16 24 07
R > HXETCUMASQNZGKRYJO̲̅IDFWVBPL LFAR 10 16 24 08
I > FGRJUABYW̲̅DZSXVQTOCLPENIMHK LFAS 10 16 24 09
E > SJWYN̲̅UZPQBVXRETHIMAOFKCLDG LFAT 10 16 24 10
G > EOKPAQW̲̅JLHCISTBDFVMNXRGUZY LFAU 10 16 24 11
Limitations
Note that the correct display of some characters used to represent components (thin Naval rotors) assumes support for Unicode, while some aspects of the display of machine state depend on support for combining Unicode. This is a known limitation that will be addressed in a future release.
Documentation
Full documentation — for the latest release version — is available on Hackage.
Alternatives
For other Haskell Enigma machines see:
This package served as the basis for a Python version, with essentially the same API.
Development status
I’m currently learning and experimenting with some Haskell language features and can’t promise the development version will work. More detail about planned releases and activities can be found the list of scheduled milestones and in the list of open issues. For information on which GHC versions are supported by each release, see the package’s Hackage Matrix.
Changes
A list of key changes in Hackage releases, along with planned features of some expected future releases (in parentheses).
See also:
- the list of code releases;
- open milestones;
- closed milestones; and
- issues.
(0.0.2.?)
(0.0.2.11)
- (Unicode checking for messages and letters.)
- (Force characters into map range or catch indexing errors in encoding.)
- (Further workflow changes: stack integration, Stackage, etc.)
0.0.2.10
- Include Stackage LTS 10.1
- Minor workflow and tidying
0.0.2.9
0.0.2.8
- Workflow changes.
0.0.2.7
0.0.2.6
- Add QuickCheck tests.
- Remove (disabled) assertions from
configEnigma
and fail with an error when bad arguments are given. - Convert all strings provided as
Message
arguments to valid machine input (seemessage
).
0.0.2.5
- Test and abandon Travis CI Hackage deployment.
0.0.2.4
- Correct minor errors in project repo and CI links.
0.0.2.3
- Minor tidying and organization.
0.0.2.2
- Minor corrections to documentation.
0.0.2.1
- Add test figure to documentation.
- Minor corrections to documentation.
0.0.2.0
- Start testing module.
- Expose valid rotor and reflector names in API.
0.0.1.7
- Fix Hackage uploading and versioning errors.
0.0.1.6
- Fix Hackage uploading and versioning errors.
0.0.1.5
- Fix readme formatting errors.
0.0.1.4
- Some minor spelling corrections and notes.
- Added Documentation.
- Added README.
- Added CHANGELOG.
- Support for build checks.
0.0.1.3
Initial Hackage version. First upload of package to Hackage, without (successful) Hacakge-built documentation. Stable enough for use, but not reviewed.