예제 #1
0
    def test_encrypt_2extra_rotors(self):

        # test case 5 (use spare rotors)

        crossRef = ("VKCTAEOJVXCQCHWRBOHFXZAFCJCPOGACAKFZWJQZADBMQYWODJP"
                    "VAZIMTGTYTUUYQHGMKRSXGEEBPAMAXFGWUJRKPQNYEWXKQSRKPZODI"
                    "MMSEFJXENKBOLNTDCXBTPIAXSFWRZXDDYAVJAIAPPJMAHRZBCNMWDU"
                    "KBAOVSJDZYQLZTNOQZLYWTUSKHXKUQNXUPLCGMGXFXCANPYCTZVEZA"
                    "TKODTFNLUXGUSKPTDOHJOIZPGPMNYORADAEJNTTXRIDZVQDDNXHRAF"
                    "OBYQWQMIIDDEXMYOVYMPYDNZARYWVHWBKVYBJLJGGFALGELBLWKMXR"
                    "SQUGSXFBFFHIMGBOBBZZJUNJZQFFXQSGBINCHOSZCFEKHFID")

        fast = [5, 4, 21]
        middle = [2, 19, 8]
        slow = [4, 13, 2]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #2
0
    def test_encrypt_3extra_rotors(self):

        # test case 6 (use additional Marine rotors)

        crossRef = ("KUQSBQYJROCSTIQPGHNSMAODYPRUGNZQKOFUQLOKJTMSUOPOZAJ"
                    "FGNKHNKBNJBWDTDHKVSLYWVIMYKPCNCDJCVXCFKQRSPCURGVNJIDZP"
                    "PPTBOGMWBGJJHVIANNBTLEPVYDCHVYCJCCYOMRXDPQYYLAVVYNVCOE"
                    "LDVNKETYKCDSBTDUXMHQTKQPATDWAMGFORUYTCXAFNPENMVITPDPQD"
                    "NWBVVEGWYDCUINBUCUASVQBZPWJCGPWKMPAGVWZNYSQDFYSFQVWKMN"
                    "FTRUNXQMNLWLTGWJMVGAKCEYUHVMTEORLUXFLWWMAQLRBDCECSOWZT"
                    "NZLRKZCKKCBZENRGSLLGIBAHHRSHDUWHKXUFUMYFHJPDAWIH")

        fast = [8, 4, 21]
        middle = [7, 19, 8]
        slow = [6, 13, 2]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #3
0
    def test_encrypt_ring_settings(self):

        # test case 4 (pseudo random ring settings)

        crossRef = ("HQDOTZQRZZELCKEPOVXJFJYAHECMJRZTUVAUFGEOKUFIBEHQMUQ"
                    "LSXOIYEEWABZXGDCEALKIZQNVZWXDCQWVVSSNLBSITAXCXHJYVIMHK"
                    "ZGOJMDYXPOHMZBOPJXFWBCHCHDYQLMMICPYAGSFZJBNFNXTETJGGKO"
                    "HMRXMBOJIMKUTWJNTFHYTKGZKYYPYKZCIOBNKLMMGXLPJGECGTSSVK"
                    "TOQRUFSVGWZNCLZMLHLYIGLNBBHOCGIVJPKVRYWSXSCPJIDWUCYQQW"
                    "CIALKYIONOAMDMJROWBQNSMHRRERFXAJHBNVUNEMJXAHQHUJTIBQHX"
                    "RKLLOSZVTBRINGSWXLWPQBFHDFURKSAXJDVWJLHZMFMOCDPP")

        fast = [1, 4, 21]
        middle = [2, 19, 8]
        slow = [3, 13, 2]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #4
0
    def test_encrypt_start_positions(self):

        # test case 3 (pseudo random start positions)

        crossRef = ("RCLJKRMGRENHTFVDUNYKUVTLHRIVZCXWKWERUODYLITBQJEXUZB"
                    "WQFOXPRAFLJOSPBGQTXQAIZGSEZTYFKRQCGJDGDAIEMEGCWJVLPHFP"
                    "UJZCOHWVYPKZXHYDGFLDOQLNIZHCFBVBESKLGBLRNOFPJFZLNLMGKRR"
                    "CEDKSINLNZWGQAWVIQEJEBALVIJVQJKNGYOELNUOWHDINTBAJOOXHFV"
                    "TIJYMOCRDKVAWKPGJDYTSDIORZBBRBKGDWFQNQSGDTIAMTADYDYMMEG"
                    "GHQGDQTGIIMCMRZFJZCBNOHVZESMYPVBLRQYRQMWGPDFLQLLZVMOJOP"
                    "WCNGKISFTRYEJQLHRXVWQGVWFQPZLCDKQBMBETIVYVIJ")

        fast = [1, 4, 1]
        middle = [2, 19, 1]
        slow = [3, 13, 1]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #5
0
    def test_encrypt_with_plugs(self):

        # test case 2 (plugs added)

        crossRef = ("PLFUFNVDXUSNVPSRYAGZXMZUPYBRDHRWKLWYWPYUNZNYNMRMRXO"
                    "KKKNNSZNHSYOCAVOWPNRZWHSJOXJCJFAQNYKZJNIZPZCOFMRXHTEQQ"
                    "EOJFVSJIAUIJXNKZXEVHPVDOJCLSFVCUDFRLFSLLUQZWVWSTUKYAJKY"
                    "ZOEXZMTPOOADYWJTNGHSIARQFXLHKZUZOQWTBQVDCASKIXBNNUYJQVKW"
                    "PYANBEVOWSAMAORXJKJUONGHVNJTLOAAORRBYPTTKSIDDEBAETMPLYDH"
                    "WKXPEJNUQEMAILNBABZWTEMOYRDKEOTOXCJGMBLEMBOODHZXJQARBLQEI"
                    "FEDZDXHHCIVBFBOKGESKVITZHSVNWHLEEJCPIQEV")

        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #6
0
    def test_encrypt_reflect_a(self):

        # test case 8 (UWK-C Reflector)

        crossRef = ("OWGYQFYYGQGXAUXUYEDLPPYLYEYVISVWDIASHYJKPSPURENKHAO"
                    "AHJNZJZBDLVFGMKHUGIBGCVNCNISCHVBAGSMEFCSXSSGOHBOPZLPOH"
                    "OFYMLBZRUDEXMSSZLWTXCSTMFIUQSMALDHQFFPFMWVLUKWOFNXUZAF"
                    "FHYVHYZQREVSVWOJXPALBFNJMSGRETXGFBMLBXRDHQXFIKRRLFGTKL"
                    "JAJFSJWKSRWQRJMUFMCGRYNIFWLLVAQQZYNHZGKUUSZVLTQTYVNSYV"
                    "JEJSIWRABHBBMARQPDBJKYCURFGYICPQOFHRTISICWFIADVPTGJZFB"
                    "GZYPIMNRHMXRDETTUXENLAXSCIBQYVXDDUSHRGVNYJQDQZJB")

        fast = [5, 4, 21]
        middle = [2, 19, 8]
        slow = [4, 13, 2]
        rot = [fast, middle, slow]
        ref = "UKW-C"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #7
0
    def test_encrypt_basic(self):
        # test case 1 (base test)

        crossRef = ("ILFDFARUBDONVISRUKOZQMNDIYCOUHRLAWBRMPYLAZNYNGRMRMV"
                    "AAJLNSZFHSYBBKFODPCHQPHSWOQZCJFKXNBAZJNPZHZBGOMNXOPPXX"
                    "EVJWISBPSDPJQBKZXCTHIVUOJJCSOVBSWFZLGSLFDXMWZWSMHAYRJA"
                    "SZSGQDMQRLKAULWOZNGHSRKVXFQLEVXDWHAWZBXVFBISAAQCNNFYJX"
                    "BAWIYKWCEUOCSKMKHEQGAJDONNHVNJTADKKYRYCYITTAGPDUZMKESM"
                    "IJDCHOKQOEJIOXFMKSLNBKCZGAHMMJRSFVSIYQZJGMCNEMLSOUHZAJ"
                    "XDRBOXVJLMNZUQAMQONCFCOKGESAVPJZESHNZBLEEJOAPXRV")

        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        static = [9, 1, 1]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = []
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #8
0
    def test_encrypt_reflect_a(self):

        # test case 6 (UWK-A Reflector)

        crossRef = ("DPIINKGUZUEWNTTEALRDRAVQTZMAXCWDJQOBMFORTYAISZYNXUA"
                    "FZLLWCAYKRPRCZZUXMGXBRXSWLGFYNLCKIKCPINZDKXVWXMXOADMYQ"
                    "BVRVRTYBDBURZMXSPVMGDMJYDTZXFLGKCCXRUMEJZGXHOXPDSSKOED"
                    "EZOAJMCFDKNQBAKKLJPNTOXUBPPWRWMVQQKRNPILOSBKPWPFYMBIWO"
                    "AJYSYDKTCCXEOYTKLGIYBJRNSHBXFPWYKJQRKFMRNWMLTNIHKPFAVB"
                    "BURFCYZXWTZGNXURCJQREPHLTXPUNURNFDDAIXZYWIGYEXJXZXMORZ"
                    "DSMQWAZOMJPZHBRZQZXHCFJKBUVCZCKPFDLJDQBRDSYUSSPP")

        fast = [5, 4, 21]
        middle = [2, 19, 8]
        slow = [4, 13, 2]
        rot = [fast, middle, slow]
        ref = "UKW-A"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("ENIGMAI", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("ENIGMAI", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #9
0
    def test_duplicate_rotor(self):

        # general setup
        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        rot = [fast, middle, slow]
        ref = "UKW-B_THIN"
        plugs = []

        rot[0][0] = 1
        rot[1][0] = 1
        rot[2][0] = 3

        with self.assertRaises(enigma_exception.DuplicateRotor):
            self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        rot[0][0] = 1
        rot[1][0] = 2
        rot[2][0] = 2

        with self.assertRaises(enigma_exception.DuplicateRotor):
            self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        rot[0][0] = 3
        rot[1][0] = 2
        rot[2][0] = 3

        with self.assertRaises(enigma_exception.DuplicateRotor):
            self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
예제 #10
0
    def test_incorrect_rotor(self):

        # general setup
        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        static = [9, 1, 1]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = []

        for x in range(0, 3):
            for y in range(9, 11):
                rot[x][0] = y
                with self.assertRaises(enigma_exception.InvalidRotor):
                    self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
            # reset rotors to ids 1,2,3
            rot[0][0] = 1
            rot[1][0] = 2
            rot[2][0] = 3

        for x in range(1, 9):
            rot[3][0] = x
            with self.assertRaises(enigma_exception.InvalidRotorFour):
                self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
예제 #11
0
    def test_incorrect_reflector(self):

        # general setup
        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        rot = [fast, middle, slow]
        plugs = []

        # M4 only reflector
        ref = "UKW-B_thin"
        with self.assertRaises(enigma_exception.InvalidReflector):
            self.e = enigma_machine.EnigmaMachine("ENIGMAI", rot, ref, plugs)

        # M4 only reflector
        ref = "UKW-C_thin"
        with self.assertRaises(enigma_exception.InvalidReflector):
            self.e = enigma_machine.EnigmaMachine("ENIGMAI", rot, ref, plugs)
예제 #12
0
    def test_double_step_single_notch(self):

        fast = [1, 17, 1]
        middle = [2, 4, 1]
        slow = [3, 1, 1]
        plugs = []
        ref = "UKW-B"
        rot = [fast, middle, slow]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        self.assertEqual("Z", e.encrypt('A'))
        self.assertEqual("U", e.encrypt('B'))
예제 #13
0
    def test_double_step_dual_notch(self):

        fast = [8, 26, 1]
        middle = [7, 25, 1]
        slow = [6, 24, 1]
        plugs = []
        ref = "UKW-B"
        rot = [fast, middle, slow]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        self.assertEqual("G", e.encrypt('A'))
        self.assertEqual("Y", e.encrypt('B'))

        fast = [8, 13, 1]
        middle = [7, 12, 1]
        slow = [6, 11, 1]
        plugs = []
        ref = "UKW-B"
        rot = [fast, middle, slow]
        e = enigma_machine.EnigmaMachine("M3", rot, ref, plugs)
        self.assertEqual("G", e.encrypt('A'))
        self.assertEqual("Y", e.encrypt('B'))
예제 #14
0
    def test_compatibility_gamma(self):

        fast = [1, 4, 21]
        middle = [2, 19, 8]
        slow = [3, 13, 2]
        # beta rotor
        static = [10, 1, 1]
        rot_M3 = [fast, middle, slow]
        rot_M4 = [fast, middle, slow, static]
        ref_M3 = "UKW-C"
        ref_M4 = "UKW-C_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e_M3 = enigma_machine.EnigmaMachine("M3", rot_M3, ref_M3, plugs)
        e_M4 = enigma_machine.EnigmaMachine("M4", rot_M4, ref_M4, plugs)
        ciphertext_M3 = ""
        ciphertext_M4 = ""
        for c in self.plaintext:
            ciphertext_M3 = ciphertext_M3 + e_M3.encrypt(c)
            ciphertext_M4 = ciphertext_M4 + e_M4.encrypt(c)

        # check for proper encryption compatabiltiy
        self.assertEqual(ciphertext_M3, ciphertext_M4)
예제 #15
0
    def test_encrypt_start_positions(self):

        # test case 3 (pseudo random start positions)

        crossRef = ("MEYJZTOQPGIHEZIODBVKCPAGUMMQSYXCFTRWKUCDLGHYFFCINOO"
                    "IHVTONWSVJCODFEBDTHWOVVWHPEPZCAURGURZYCLAHMTQEQYJFMVBA"
                    "USFHVXYEUPUURQUGTGCZRTIYBYEXKTYHXVBURKFEHYIBERJUNEMJCH"
                    "XFOLHKGJTQWYRQKGBFRACHZFFARUGJXIAVSPHXXBFWGJSNMJNCZPUY"
                    "IVTMVYQUVPMMCZKCSASSXLGUOBLIEPSDAMCGFWTKGGOOWGYTKBULQY"
                    "QDZCGEPITTYQDDBGNTSVFEVMANWDNHWQXKFBYLGLDXPLTLPKPJHCXI"
                    "LLVKDHMVXOEXKJYPFKJOKHUHUZVXKKPALYDQCLZBXEVMTFDJ")

        fast = [1, 4, 1]
        middle = [2, 19, 1]
        slow = [3, 13, 1]
        static = [9, 17, 1]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #16
0
    def test_incorrect_reflector(self):

        # general setup
        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        rot = [fast, middle, slow]
        plugs = []

        # Enigma I reflector
        options = ["UKW-A", "UKW-B", "UKW-C"]
        for ref in options:
            with self.assertRaises(enigma_exception.InvalidReflector):
                self.e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
예제 #17
0
    def test_encrypt_reflect_c_thin(self):

        # test case 7 (UWK-C_THIN Reflector)

        crossRef = ("GJBINQJOVXXSVANOFORGCHMBPHVLBOWCZXWAEJVRCYKSSGBQFBA"
                    "SNXQYSGTQSFHWFNYXSCJMSDKSLNOZRSQWKICWEHPOYYRLDPPNFYDMR"
                    "LVENKHJBMVRFQBXSTXNBQNWYNGRBJSYDYCORTJZOHZMHJQHOKWKWEH"
                    "HZKAISKZXFBOFTFFKWHIATMSBOQCSQYENGDIXHKFOCGSZWUZYMWBIY"
                    "AQZSQVOMQBDTDIKGLESYVJZQRANDGXWRRVMRKZXTHEVAONDFXLFMVN"
                    "FORCKRHOYKRSNZDRZTNMFPPJUNRNEKAFFLCMFFZGWBROBUNXSWFMRY"
                    "URMWEHZIUWEEBQQDLHGCIYJZTRIFNCSRBGKEFHAZKEUUKKCJ")

        fast = [5, 4, 21]
        middle = [2, 19, 8]
        slow = [4, 13, 2]
        static = [9, 17, 3]
        rot = [fast, middle, slow, static]
        ref = "UKW-C_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #18
0
    def test_encrypt_gamma_rotor(self):

        # test case 7 (use gamma rotor)

        crossRef = ("KWBSTXTFVJPBPGXPFKNQOSIDMPWBRPXTNWWZCDCYORYPJCLRLNP"
                    "QNJXGNRIQZQVALVSNVUUFXLEKEKECHSVKMEQGAQGVBPHQJAULFOLLK"
                    "VNIHMVMVKTSSAKHOJYRMRDLYGGRYBIXHROVIOSWPHWJCPAVFQKGZTO"
                    "PIAGXQHFWKHVBRRJZYTYGUWMTTUCDGEKNYQTUIGWNQXUKGXIZQZTTD"
                    "SLDWAQOWKTVMDTBRXOGXZZNBJLYKXLSNROAVLLMHEKKIDSFSPGFQST"
                    "HTYTKMFGMGNLEUHIXDIWLMMZJEYLIPOWRYVNTWMXEQQSHZLQIMLUEEL"
                    "FYSASXSLWYMBRJRBGFZDCXBLLRWRVQOFQENZTVFZHHSWSFV")

        fast = [8, 4, 21]
        middle = [7, 19, 8]
        slow = [6, 13, 2]
        static = [10, 17, 3]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #19
0
    def test_encrypt_3extra_rotors(self):

        # test case 6 (use additional Marine rotors)

        crossRef = ("PKGBNSQGPFELOKMXBQDLKLTZRFCLVZVRJSJFGVDETXEAZBDUKXM"
                    "LQBAHCVXOKFNWJEYUYCYBZBCHPFFJECQWROBZHETRSJRWNIHSJHQRW"
                    "PVLXPBPYBPLJZSTAMNFETECAWLTRYJQVLYWFJPTLOOYADCDVYTAYMC"
                    "VMVIRUAATRYBHHQXLHNUDWLIBUPPJPGSWDRCHXOLBKMGOMMSSMBKPM"
                    "WWMRXHZHZKEQADEUYFHQIPHVCBSXRTORJROKNJVAAVQZOYMOOOXEMK"
                    "IJWMSNBMHBPTJVOZBVJCPWEMVIDSMLYBYOMUIKXIOBSWTFQGLLBIGQ"
                    "VDVVKNBHDKBRVLTVGYJMUNBSYEDEHBGAQDVCEAPIYDSPQWDJ")

        fast = [8, 4, 21]
        middle = [7, 19, 8]
        slow = [6, 13, 2]
        static = [9, 17, 3]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #20
0
    def test_encrypt_2extra_rotors(self):

        # test case 5 (use spare rotors)

        crossRef = ("WVXXAMXGWOUIHPGHPUUNSWWGSUXEZLAEXRHEOOKDODHCKHADVIK"
                    "ZQUCDDIQFAYWNHCQMFYKKHJYDSKTESCZSHVRGNJUPCHENGUBYWOVQB"
                    "JMTBZSSEYCQYHPTDWZEJULQUYEHGCWQZBAWCWGYBOCFAVLMLWDMMXQ"
                    "TBFWOZVOWBGJTKRRZRZBMZVGKFMTMORZPXZJJAYVFVODGOEYTYFZNP"
                    "MURDICSWHDQLTTLOENNQPGFONSVSXZRDSPWQBBHDYKPQZUBWPHHBXO"
                    "SNYBPUYHTAPOXPFFDKOWLDZAPETMWINTKCJCUNNVGTYGNBSBPAOEXD"
                    "AFUXGGFLYXDWTRXAKCPTZKBCOGGIIQHBGQZPUYILAQXKWHFX")

        fast = [5, 4, 21]
        middle = [2, 19, 8]
        slow = [4, 13, 2]
        static = [9, 17, 3]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #21
0
    def test_encrypt_ring_settings(self):

        # test case 4 (pseudo random ring settings)

        crossRef = ("XSVCNOXUDAXRVVIJCOUXIJEJZKJJQURLYVSLTVXRTDPQAPJEURU"
                    "BSHHESLUBHLVABRGFSAQIVIQTGSSEZAOAYYDCAPHDWISIRHMVREOFR"
                    "ODXYMFJKOSQKYBJQZDYPHMMZNXVMPWXUNXREMFWGHUWTRRUBJBBYHF"
                    "CITGZRGXLZLATUNCHKETQRBRNLYFIMZVAIMUPLWGLMFHVYEAWOGFFSX"
                    "FDZVVSIWDONXXUBMJNZMJRVTYJYFZRISVCOTWTGBJJSYTGFSWWDXJFM"
                    "DWYUNNQIUGDJLBWNDGLGSGRUYTRPGWJBQBRNTHMKWKJMOOVFBQLVFKD"
                    "HQZOCXXLIZCZVSBJPZMFWTMNXCWJNWPMOCJSXOFLIVMGC")

        fast = [1, 4, 21]
        middle = [2, 19, 8]
        slow = [3, 13, 2]
        static = [9, 17, 3]
        rot = [fast, middle, slow, static]
        ref = "UKW-B_THIN"
        plugs = ["AK", "BC", "UD", "PI", "QX"]
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)
        ciphertext = ""
        for c in self.plaintext:
            ciphertext = ciphertext + e.encrypt(c)

        # check for proper encryption
        self.assertEqual(crossRef, ciphertext)

        # restore initial settings
        e = enigma_machine.EnigmaMachine("M4", rot, ref, plugs)

        original = ""
        for c in ciphertext:
            original = original + e.encrypt(c)

        # check for proper decryption
        self.assertEqual(self.plaintext, original)
예제 #22
0
    def test_incorrect_rotor(self):

        # general setup
        fast = [1, 1, 1]
        middle = [2, 1, 1]
        slow = [3, 1, 1]
        rot = [fast, middle, slow]
        ref = "UKW-B"
        plugs = []

        for r in rot:
            for x in range(9, 11):
                r[0] = x
                with self.assertRaises(enigma_exception.InvalidRotor):
                    self.e = enigma_machine.EnigmaMachine(
                        "M3", rot, ref, plugs)
            # reset rotors to ids 1,2,3
            rot[0][0] = 1
            rot[1][0] = 2
            rot[2][0] = 3