def test_rotor_mechanism_4(self):
     reflector = Reflector(EnigmaSettings.get_reflectors()['B'])  # A/B/C
     rotor_1 = Rotor(EnigmaSettings.get_rotors()['I'], 'A')  # I / II / III / IV / V
     rotor_2 = Rotor(EnigmaSettings.get_rotors()['II'], 'A')  # I / II / III / IV / V
     rotor_3 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], reflector)
     self.assertEqual('A', chr(rotor_mechanism.process(ord('B') - ord('A') + 1) - 1 + ord('A')))
     self.assertEqual('A', chr(rotor_mechanism.process(ord('D') - ord('A') + 1) - 1 + ord('A')))
     self.assertEqual('A', chr(rotor_mechanism.process(ord('Z') - ord('A') + 1) - 1 + ord('A')))
     self.assertEqual('A', chr(rotor_mechanism.process(ord('G') - ord('A') + 1) - 1 + ord('A')))
     self.assertEqual('A', chr(rotor_mechanism.process(ord('O') - ord('A') + 1) - 1 + ord('A')))
Example #2
0
 def set_rotor_mechanism(self, rotor_mechanism: RotorMechanism):
     self.rotor_mechanism_encryption = rotor_mechanism
     self.rotor_mechanism_decryption = rotor_mechanism.copy()
     if self.key.size() != len(self.rotor_mechanism_encryption.rotors):
         raise ValueError(
             'Enigma_set_key: number of rotors must be equal to key length')
     self.set_key(self.key)
Example #3
0
    def get_crypto(type: dict, settings: dict, *args) -> (Dict[str, dict], ICrypto):
        type = CryptoMaker.get_type(type)

        if type == 'enigma':
            settings = CryptoMaker.get_settings(type, settings)
            enigma_str_key, enigma_reflector, enigma_rotors, enigma_plugboard = settings['key'], settings['reflector'], settings['rotors'], settings['plug_board']

            plug_board = PlugBoard(enigma_plugboard)
            reflector = Reflector(EnigmaSettings.get_reflectors()[enigma_reflector])  # A/B/C
            rotor_1 = Rotor(EnigmaSettings.get_rotors()[enigma_rotors['1']['type']],
                            enigma_rotors['1']['ring'])  # I / II / III / IV / V
            rotor_2 = Rotor(EnigmaSettings.get_rotors()[enigma_rotors['2']['type']],
                            enigma_rotors['2']['ring'])  # I / II / III / IV / V
            rotor_3 = Rotor(EnigmaSettings.get_rotors()[enigma_rotors['3']['type']],
                            enigma_rotors['3']['ring'])  # I / II / III / IV / V

            enigma_key = Key[str]()
            for i, char in enumerate(enigma_str_key):
                enigma_key.set_key(str(i), char)
            rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], reflector)
            return {type: dict(settings)}, Enigma(enigma_key, plug_board, rotor_mechanism)
        elif type == 'caesar':
            key_exchange: IKeyExchangeGenerator = args[0]
            caesar_key = Key[int]({'key': key_exchange.get_key_exchange().get_k()})
            key_exchange.set_crypto(Caesar(caesar_key))
        else:
            return None
 def test_enigma_2(self):
     plug_board = PlugBoard(['ab', 'ce'])
     reflector = Reflector(EnigmaSettings.get_reflectors()['B'])  # A/B/C
     rotor_1 = Rotor(EnigmaSettings.get_rotors()['I'], 'A')  # I / II / III / IV / V
     rotor_2 = Rotor(EnigmaSettings.get_rotors()['II'], 'A')  # I / II / III / IV / V
     rotor_3 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], reflector)
     enigma_key = Key()
     enigma_key.set_key('I', 'D')
     enigma_key.set_key('II', 'O')
     enigma_key.set_key('III', 'G')
     enigma = Enigma(enigma_key, plug_board, rotor_mechanism)
     p_text = "ENIGMA"
     c_text = enigma.encryption(p_text)
     p_text_2 = enigma.decryption(c_text)
     self.assertEqual(p_text, p_text_2)
 def test_enigma_3(self):
     plug_board = PlugBoard(['ab', 'ce'])
     reflector = Reflector(EnigmaSettings.get_reflectors()['B'])  # A/B/C
     rotor_1 = Rotor(EnigmaSettings.get_rotors()['I'], 'A')  # I / II / III / IV / V
     rotor_2 = Rotor(EnigmaSettings.get_rotors()['II'], 'A')  # I / II / III / IV / V
     rotor_3 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], reflector)
     enigma_key = Key()
     enigma_key.set_key('I', 'D')
     enigma_key.set_key('II', 'O')
     enigma_key.set_key('III', 'G')
     enigma = Enigma(enigma_key, plug_board, rotor_mechanism)
     p_text = "3"
     try:
         c_text = enigma.encryption(p_text)
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(str(ve), str(ValueError('EnigmaStatic_valid_character: unexpected character, enigma only supports A-Z characters')))
 def test_cbc_mode_3(self):
     pain_text = 'ABCC'
     plug_board = PlugBoard(['ab', 'ce'])
     reflector = Reflector(EnigmaSettings.get_reflectors()['B'])  # A/B/C
     rotor_1 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_2 = Rotor(EnigmaSettings.get_rotors()['II'], 'A')  # I / II / III / IV / V
     rotor_3 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], reflector)
     enigma_key = Key[str]()
     enigma_key.set_key('I', 'D')
     enigma_key.set_key('II', 'O')
     enigma_key.set_key('III', 'G')
     enigma = Enigma(enigma_key, plug_board, rotor_mechanism)
     cbc_key = Key[str]()
     cbc_key.set_key('cbc_key', '0SD')
     cbc_mode = InverseCBCMode(enigma, cbc_key)
     c_msg = cbc_mode.encryption(pain_text)
     p_msg = cbc_mode.decryption(c_msg)
     pain_text += (len(p_msg) - len(pain_text)) * 'F'
     self.assertEqual(pain_text, p_msg)
 def test_rotor_mechanism_2(self):
     rotor_1 = Rotor(EnigmaSettings.get_rotors()['I'], 'A') #I / II / III / IV / V
     rotor_2 = Rotor(EnigmaSettings.get_rotors()['II'], 'A')  # I / II / III / IV / V
     rotor_3 = Rotor(EnigmaSettings.get_rotors()['III'], 'A')  # I / II / III / IV / V
     rotor_mechanism = RotorMechanism([rotor_3, rotor_2, rotor_1], None)
     try:
         rotor_mechanism.process(25)
         self.assertFalse(True)
     except AttributeError as ae:
         self.assertEqual(str(ae), str(AttributeError('\'NoneType\' object has no attribute \'wiring\'')))
     try:
         rotor_mechanism.process(225)
         self.assertFalse(True)
     except KeyError as ke:
         self.assertTrue(True)
Example #8
0
    def write_text(self, text: str, rotor_mechanism: RotorMechanism) -> str:
        if text is None: text = ''
        after_text = ''
        text = text.upper()
        for character in text:
            valid_character(character, True)

        for character in text:
            if self.plug_board is not None:
                plug_board_character = self.plug_board.get_plug_char(character)
            else:
                plug_board_character = character
            plug_board_num = az_to_index(plug_board_character) + 1
            wheel_pack_num = rotor_mechanism.process(plug_board_num)
            wheel_pack_character = index_to_az(wheel_pack_num - 1)
            if self.plug_board is not None:
                plug_board_character_2 = self.plug_board.get_plug_char(
                    wheel_pack_character)
            else:
                plug_board_character_2 = wheel_pack_character
            after_text += plug_board_character_2

        return after_text