top | item 39736775

Engima Breaker in Rust

73 points| wkaisertexas | 1 year ago |github.com

16 comments

order

65a|1 year ago

CWOWD CZKZO DLUML TPRHR KXFHH MHIUS TMXON CHQXQ DFMBI APKZV DRFIU SEFLV ZSSPK ESGNE BNRQA QBVHH YMAZ

just to not be cruel, it's an m3 without UKW-D, 3 rotors and a plugboard :)

EDIT: I think I answered my question looking at the code. There are a lot more rotors known (see cryptomuseum). Some things I found while writing an enigma: many online enigmas have some bugs with double stepping the wheel on a single press, which the machine did not do. The Humboldt University Berlin's online enigma is correct. There is also a very similar machine used by the Soviets until the 1980s that you can probably represent with the same datastructures called Fialka: https://en.wikipedia.org/wiki/Fialka.

My test case that returns different results on different emulators is: M3, rotors III, II, I, no ring setting, UKW-B, starting position AEQ. The string ABCDEFGHIJ produces OMUQBCLPVR in minarke.c and produces LUINDKMWNH in the University Humboldt Berlin enigma. I believe the latter is correct.

Pewqazz|1 year ago

Hey, I'm the original author of the repo -- I noticed a bunch of stars coming in and figured it was coming from Hacker News, heh.

I should probably go and make it clearer in the README, but you're right, by no means is it a full Enigma implementation. It mostly started as a translation of code described in [this post](http://practicalcryptography.com/ciphers/mechanical-era/enig...) from C to Rust (since I was a naïve undergrad interested in Rust).

At some point it would be cool to add the full Enigma functionality. Do you have any guidance for test cases and/or reference implementations?