- >>> enigma = Enigma(reflector_b_spec, \
- wheel_i_spec, wheel_i_pegs, \
- wheel_ii_spec, wheel_ii_pegs, \
- wheel_iii_spec, wheel_iii_pegs, \
- 1, 1, 1, \
- '')
- >>> enigma.set_wheels('a', 'a', 't')
- >>> enigma.wheel_positions
- (0, 0, 19)
- >>> cat(enigma.wheel_positions_l)
- 'aat'
- >>> enigma.peg_positions
- ([16], [4], [2])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'puvioztjdhxmlyeawsrgbcqknf'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 0, 20)
- >>> cat(enigma.wheel_positions_l)
- 'aau'
- >>> enigma.peg_positions
- ([16], [4], [1])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'baigpldqcowfyzjehvtsxrkumn'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 0, 21)
- >>> cat(enigma.wheel_positions_l)
- 'aav'
- >>> enigma.peg_positions
- ([16], [4], [0])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'mnvfydiwgzsoablrxpkutchqej'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 1, 22)
- >>> cat(enigma.wheel_positions_l)
- 'abw'
- >>> enigma.peg_positions
- ([16], [3], [25])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'ulfopcykswhbzvderqixanjtgm'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 1, 23)
- >>> cat(enigma.wheel_positions_l)
- 'abx'
- >>> enigma.peg_positions
- ([16], [3], [24])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'qmwftdyovursbzhxaklejicpgn'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 1, 24)
- >>> cat(enigma.wheel_positions_l)
- 'aby'
- >>> enigma.peg_positions
- ([16], [3], [23])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'oljmzxrvucybdqasngpwihtfke'
-
-
-
-
- >>> enigma.set_wheels('a', 'd', 't')
- >>> enigma.wheel_positions
- (0, 3, 19)
- >>> cat(enigma.wheel_positions_l)
- 'adt'
- >>> enigma.peg_positions
- ([16], [1], [2])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'zcbpqxwsjiuonmldethrkygfva'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 3, 20)
- >>> cat(enigma.wheel_positions_l)
- 'adu'
- >>> enigma.peg_positions
- ([16], [1], [1])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'ehprawjbngotxikcsdqlzyfmvu'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 3, 21)
- >>> cat(enigma.wheel_positions_l)
- 'adv'
- >>> enigma.peg_positions
- ([16], [1], [0])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'eqzxarpihmnvjkwgbfuyslodtc'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (0, 4, 22)
- >>> cat(enigma.wheel_positions_l)
- 'aew'
- >>> enigma.peg_positions
- ([16], [0], [25])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'qedcbtpluzmhkongavwfirsyxj'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (1, 5, 23)
- >>> cat(enigma.wheel_positions_l)
- 'bfx'
- >>> enigma.peg_positions
- ([15], [25], [24])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'iwuedhsfazqxytvrkpgncoblmj'
-
- >>> enigma.advance()
- >>> enigma.wheel_positions
- (1, 5, 24)
- >>> cat(enigma.wheel_positions_l)
- 'bfy'
- >>> enigma.peg_positions
- ([15], [25], [23])
- >>> cat(enigma.lookup(l) for l in string.ascii_lowercase)
- 'baknstqzrmcxjdvygiefwoulph'
-
-
- >>> enigma.set_wheels('a', 'a', 'a')
- >>> ct = enigma.encipher('testmessage')
- >>> ct
- 'olpfhnvflyn'
-
- >>> enigma.set_wheels('a', 'd', 't')
- >>> ct = enigma.encipher('testmessage')
- >>> ct
- 'lawnjgpwjik'
-
-
- >>> enigma.set_wheels('b', 'd', 'q')
- >>> ct = enigma.encipher('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
- >>> ct
- 'kvmmwrlqlqsqpeugjrcxzwpfyiyybwloewrouvkpoztceuwtfjzqwpbqldttsr'
- >>> enigma.left_wheel.position_l
- 'c'
- >>> enigma.middle_wheel.position_l
- 'h'
- >>> enigma.right_wheel.position_l
- 'a'
-
- # Setting sheet line 31 from http://www.codesandciphers.org.uk/enigma/enigma3.htm
- # Enigma simulation settings are
- # http://enigma.louisedade.co.uk/enigma.html?m3;b;b153;AFTX;AJEU;AU-BG-EY-FP-HL-IN-JZ-OS-QR-TX
- >>> enigma31 = Enigma(reflector_b_spec, \
- wheel_i_spec, wheel_i_pegs, \
- wheel_v_spec, wheel_v_pegs, \
- wheel_iii_spec, wheel_iii_pegs, \
- 6, 20, 24, \
- 'ua pf rq so ni ey bg hl tx zj')
-
- >>> enigma31.set_wheels('j', 'e', 'u')
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (4, 11, 24)
- >>> cat(enigma31.wheel_positions_l)
- 'jev'
- >>> enigma31.peg_positions
- ([7], [21], [0])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'mvqjlyowkdieasgzcunxrbhtfp'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (4, 12, 25)
- >>> cat(enigma31.wheel_positions_l)
- 'jfw'
- >>> enigma31.peg_positions
- ([7], [20], [25])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'sjolzuyvrbwdpxcmtiaqfhknge'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (4, 12, 0)
- >>> cat(enigma31.wheel_positions_l)
- 'jfx'
- >>> enigma31.peg_positions
- ([7], [20], [24])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'qrxedkoywufmlvgsabpzjnicht'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (4, 12, 1)
- >>> cat(enigma31.wheel_positions_l)
- 'jfy'
- >>> enigma31.peg_positions
- ([7], [20], [23])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'hpsukliagqefwvtbjxcodnmrzy'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (4, 12, 2)
- >>> cat(enigma31.wheel_positions_l)
- 'jfz'
- >>> enigma31.peg_positions
- ([7], [20], [22])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'zevnbpyqowrtxdifhkulscjmga'
-
-
- >>> enigma31.set_wheels('i', 'd', 'z')
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 3)
- >>> cat(enigma31.wheel_positions_l)
- 'ida'
- >>> enigma31.peg_positions
- ([8], [22], [21])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'ikhpqrvcambzjondefwyxgsutl'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 4)
- >>> cat(enigma31.wheel_positions_l)
- 'idb'
- >>> enigma31.peg_positions
- ([8], [22], [20])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'cdabskhgzwfmlqvunyexpojtri'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 5)
- >>> cat(enigma31.wheel_positions_l)
- 'idc'
- >>> enigma31.peg_positions
- ([8], [22], [19])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'pcbwiqhgemyvjsuaftnroldzkx'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 6)
- >>> cat(enigma31.wheel_positions_l)
- 'idd'
- >>> enigma31.peg_positions
- ([8], [22], [18])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'xcbfvdnouptmlghjzwykierasq'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 7)
- >>> cat(enigma31.wheel_positions_l)
- 'ide'
- >>> enigma31.peg_positions
- ([8], [22], [17])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'xfvglbdynuseriwqpmkzjcoaht'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 8)
- >>> cat(enigma31.wheel_positions_l)
- 'idf'
- >>> enigma31.peg_positions
- ([8], [22], [16])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'tfpqlbouynsewjgcdxkahzmriv'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 9)
- >>> cat(enigma31.wheel_positions_l)
- 'idg'
- >>> enigma31.peg_positions
- ([8], [22], [15])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'cjaunvlwtbygzexrspqidfhokm'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 10)
- >>> cat(enigma31.wheel_positions_l)
- 'idh'
- >>> enigma31.peg_positions
- ([8], [22], [14])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'yltxkrqvowebzpingfucshjdam'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 11)
- >>> cat(enigma31.wheel_positions_l)
- 'idi'
- >>> enigma31.peg_positions
- ([8], [22], [13])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'myktluzrnxceaiqsohpdfwvjbg'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 12)
- >>> cat(enigma31.wheel_positions_l)
- 'idj'
- >>> enigma31.peg_positions
- ([8], [22], [12])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'pynjrmiugdqxfcvakewzhoslbt'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 13)
- >>> cat(enigma31.wheel_positions_l)
- 'idk'
- >>> enigma31.peg_positions
- ([8], [22], [11])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'mwvedyplnoxhaijgrqtszcbkfu'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 14)
- >>> cat(enigma31.wheel_positions_l)
- 'idl'
- >>> enigma31.peg_positions
- ([8], [22], [10])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'qcbrfeutvoxpnmjladzhgiykws'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 15)
- >>> cat(enigma31.wheel_positions_l)
- 'idm'
- >>> enigma31.peg_positions
- ([8], [22], [9])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'dnoahryetsmukbcvwfjilpqzgx'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 16)
- >>> cat(enigma31.wheel_positions_l)
- 'idn'
- >>> enigma31.peg_positions
- ([8], [22], [8])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'nidcfehgbqsovalyjzkxwmutpr'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 17)
- >>> cat(enigma31.wheel_positions_l)
- 'ido'
- >>> enigma31.peg_positions
- ([8], [22], [7])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'joifxdulcarhzpbntkwqgysevm'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 18)
- >>> cat(enigma31.wheel_positions_l)
- 'idp'
- >>> enigma31.peg_positions
- ([8], [22], [6])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'ptnlsxvozmwdjchayuebrgkfqi'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 19)
- >>> cat(enigma31.wheel_positions_l)
- 'idq'
- >>> enigma31.peg_positions
- ([8], [22], [5])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'slwopzqnmxybihdeguavrtcjkf'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 20)
- >>> cat(enigma31.wheel_positions_l)
- 'idr'
- >>> enigma31.peg_positions
- ([8], [22], [4])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'hcbedwlamzogixkytsrqvufnpj'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 21)
- >>> cat(enigma31.wheel_positions_l)
- 'ids'
- >>> enigma31.peg_positions
- ([8], [22], [3])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'odxbjwzrmelkisavuhnyqpfctg'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 22)
- >>> cat(enigma31.wheel_positions_l)
- 'idt'
- >>> enigma31.peg_positions
- ([8], [22], [2])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'udgbfeclrwnhxksvtioqapjmzy'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 23)
- >>> cat(enigma31.wheel_positions_l)
- 'idu'
- >>> enigma31.peg_positions
- ([8], [22], [1])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'nrdczqxmowvshaiufblypkjgte'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 10, 24)
- >>> cat(enigma31.wheel_positions_l)
- 'idv'
- >>> enigma31.peg_positions
- ([8], [22], [0])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'hkifjdoacebqtzgulyvmpsxwrn'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 11, 25)
- >>> cat(enigma31.wheel_positions_l)
- 'iew'
- >>> enigma31.peg_positions
- ([8], [21], [25])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'yptzuhofqvnmlkgbixwcejsrad'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 11, 0)
- >>> cat(enigma31.wheel_positions_l)
- 'iex'
- >>> enigma31.peg_positions
- ([8], [21], [24])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'vkdcwhqfjibzsptngumoraeyxl'
-
- >>> enigma31.advance()
- >>> enigma31.wheel_positions
- (3, 11, 1)
- >>> cat(enigma31.wheel_positions_l)
- 'iey'
- >>> enigma31.peg_positions
- ([8], [21], [23])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'wenpbqrouxlkychdfgzvitajms'
-
-
- >>> enigma31.set_wheels('i', 'd', 'z')
- >>> enigma31.encipher('verylongtestmessagewithanextrabitofmessageforgoodmeasure')
- 'gstsegeqdrthkfwesljjomfvcqwcfspxpfqqmewvddybarzwubxtpejz'
- >>> enigma31.wheel_positions
- (3, 12, 6)
- >>> cat(enigma31.wheel_positions_l)
- 'ifd'
- >>> enigma31.peg_positions
- ([8], [20], [18])
- >>> cat(enigma31.lookup(l) for l in string.ascii_lowercase)
- 'urygzpdmxtwshqvfnbljaokice'
-
- >>> enigma31.set_wheels('i', 'd', 'z')
- >>> enigma31.decipher('gstsegeqdrthkfwesljjomfvcqwcfspxpfqqmewvddybarzwubxtpejz')
- 'verylongtestmessagewithanextrabitofmessageforgoodmeasure'