Ejemplo n.º 1
0
        public void Plugboard_InitializedWithStaticFactoryConstructor_NoConfigurationSet()
        {
            var plugboard = Plugboard.Default();

            plugboard.PlugCableConfiguration.Should()
            .BeEmpty();
        }
Ejemplo n.º 2
0
        public void Plugboard_InitializedWithStaticFactory_NotNull()
        {
            var plugboard = Plugboard.Default();

            plugboard.Should()
            .NotBeNull();
        }
Ejemplo n.º 3
0
        public void CheckU264Message()
        {
            string expectedPlainText = "VONVONJLOOKSJHFFTTTEINSEINSDREIZWOYYQNNSNEUNINHALTXXBEIANGRIFFUNTERWASSERGEDRUECKTYWABOSXLETZTERGEGNERSTANDNULACHTDREINULUHRMARQUANTONJOTANEUNACHTSEYHSDREIYZWOZWONULGRADYACHTSMYSTOSSENACHXEKNSVIERMBFAELLTYNNNNNNOOOVIERYSICHTEINSNULL";

            // Message Key: VJNA
            // Reflector: Thin B
            // Wheel order: Beta II IV I
            // Ring positions: 01 01 01 22
            // Plug Pairs: AT BL DF GJ HM NW OP QY RZ VX
            Scrambler4 s = new Scrambler4(Reflector.ReflectorThinB(), Rotor.RotorBeta((Letters)0, Letters.V), Rotor.RotorII((Letters)0, Letters.J), Rotor.RotorIV((Letters)0, Letters.N), Rotor.RotorI((Letters)21, Letters.A));

            Plugboard p = new Plugboard(new Dictionary <Letters, Letters>
            {
                { Letters.A, Letters.T },
                { Letters.B, Letters.L },
                { Letters.D, Letters.F },
                { Letters.G, Letters.J },
                { Letters.H, Letters.M },
                { Letters.N, Letters.W },
                { Letters.O, Letters.P },
                { Letters.Q, Letters.Y },
                { Letters.R, Letters.Z },
                { Letters.V, Letters.X },
            });

            EnigmaM4 e = new EnigmaM4(s, p);

            string cypherText = "NCZWVUSXPNYMINHZXMQXSFWXWLKJAHSHNMCOCCAKUQPMKCSMHKSEINJUSBLKIOSXCKUBHMLLXCSJUSRRDVKOHULXWCCBGVLIYXEOAHXRHKKFVDREWEZLXOBAFGYUJQUKGRTVUKAMEURBVEKSUHHVOYHABCJWMAKLFKLMYFVNRIZRVVRTKOFDANJMOLBGFFLEOPRGTFLVRHOWOPBEKVWMUQFMPWPARMFHAGKXIIBG";

            string plainText = e.GetOutput(cypherText);

            Assert.That(plainText, Is.EqualTo(expectedPlainText));
        }
Ejemplo n.º 4
0
        public void CheckOperationBarbarosaMessage()
        {
            string expectedPlainText = "AUFKLXABTEILUNGXVONXKURTINOWAXKURTINOWAXNORDWESTLXSEBEZXSEBEZXUAFFLIEGERSTRASZERIQTUNGXDUBROWKIXDUBROWKIXOPOTSCHKAXOPOTSCHKAXUMXEINSAQTDREINULLXUHRANGETRETENXANGRIFFXINFXRGTX";

            // Message Key: BLA
            // Reflector: B
            // Wheel order: II IV V
            // Ring positions: 02 21 12
            // Plug Pairs: AV BS CG DL FU HZ IN KM OW RX
            Scrambler3 s = new Scrambler3(Reflector.ReflectorB(), Rotor.RotorII((Letters)1, Letters.B), Rotor.RotorIV((Letters)20, Letters.L), Rotor.RotorV((Letters)11, Letters.A));

            Plugboard p = new Plugboard(new Dictionary <Letters, Letters>
            {
                { Letters.A, Letters.V },
                { Letters.B, Letters.S },
                { Letters.C, Letters.G },
                { Letters.D, Letters.L },
                { Letters.F, Letters.U },
                { Letters.H, Letters.Z },
                { Letters.I, Letters.N },
                { Letters.K, Letters.M },
                { Letters.O, Letters.W },
                { Letters.R, Letters.X },
            });

            EnigmaM3 e = new EnigmaM3(s, p);

            string cypherText = "EDPUDNRGYSZRCXNUYTPOMRMBOFKTBZREZKMLXLVEFGUEYSIOZVEQMIKUBPMMYLKLTTDEISMDICAGYKUACTCDOMOHWXMUUIAUBSTSLRNBZSZWNRFXWFYSSXJZVIJHIDISHPRKLKAYUPADTXQSPINQMATLPIFSVKDASCTACDPBOPVHJK";

            string plainText = e.GetOutput(cypherText);

            Assert.That(plainText, Is.EqualTo(expectedPlainText));
        }
Ejemplo n.º 5
0
        public void Plugboard_InitializedWithConstructor_NotNull()
        {
            var plugboard = new Plugboard();

            plugboard.Should()
            .NotBeNull();
        }
Ejemplo n.º 6
0
        public void CheckInstructionManualMessage()
        {
            string expectedPlainText = "FEINDLIQEINFANTERIEKOLONNEBEOBAQTETXANFANGSUEDAUSGANGBAERWALDEXENDEDREIKMOSTWAERTSNEUSTADT";

            // Message Key: ABL
            // Reflector: A
            // Wheel order: II I III
            // Ring positions: 24 13 22
            // Plug Pairs: AM FI NV PS TU WZ
            Scrambler3 s = new Scrambler3(Reflector.ReflectorA(), Rotor.RotorII((Letters)23, Letters.A), Rotor.RotorI((Letters)12, Letters.B), Rotor.RotorIII((Letters)21, Letters.L));

            Plugboard p = new Plugboard(new Dictionary <Letters, Letters>
            {
                { Letters.A, Letters.M },
                { Letters.F, Letters.I },
                { Letters.N, Letters.V },
                { Letters.P, Letters.S },
                { Letters.T, Letters.U },
                { Letters.W, Letters.Z },
            });

            EnigmaM3 e = new EnigmaM3(s, p);

            string cypherText = "GCDSEAHUGWTQGRKVLFGXUCALXVYMIGMMNMFDXTGNVHVRMMEVOUYFZSLRHDRRXFJWCFHUHMUNZEFRDISIKBGPMYVXUZ";

            string plainText = e.GetOutput(cypherText);

            Assert.That(plainText, Is.EqualTo(expectedPlainText));
        }
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            Rotor rL = new Rotor(FixedMechanicRotor.ROTOR_II); 	//II has notch F
            Rotor rM = new Rotor(FixedMechanicRotor.ROTOR_IV);	//IV has notch K
            Rotor rR = new Rotor(FixedMechanicRotor.ROTOR_V);	//V  has notch A

            //Following WW2 Convention, it is Left-Mid-Right e.g. II IV V
            Rotor[] rotors = { rL, rM, rR };

            Reflector re = new Reflector(FixedMechanicReflector.REFLECTOR_B);
            Plugboard plug = new Plugboard(new String[] {
                "AV", "BS", "CG", "DL", "FU", "HZ", "IN", "KM", "OW", "RX"}); //Barbarosa
            WindowSetting initialSetting = new WindowSetting('B', 'L', 'A');
            RingSetting ringPositions = new RingSetting(2, 21, 12);

            //an example of naming hassle because Enigma is both namespace and class
            Enigma.representation.Enigma enigma = new Enigma.representation.Enigma(rotors, re, plug, ringPositions, initialSetting);

            string myfile = "C:\\Users\\ToshiW\\Documents\\Visual Studio 2012\\Projects\\Enigma\\Enigma\\Resources\\BarbarosaCiphertext.txt";
            string input = Utility.FileToString(myfile);
            //Console.WriteLine(readResult);
            //Console.ReadLine();

            //Let Enigma do its thing
            string result = enigma.encryptString(input);

            Console.WriteLine(result);
            Console.ReadLine();
        }
Ejemplo n.º 8
0
    public void ValidConstruction()
    {
        var pb = new Plugboard("AB");

        Assert.AreEqual('B', pb.process('A'), "A has to be translated to B with 'AB'");
        Assert.AreEqual('A', pb.process('B'), "B has to be translated to A with 'AB'");
        Assert.AreEqual('C', pb.process('C'), "C has to stay C with 'AB'");
    }
Ejemplo n.º 9
0
 public EnigmaMachine()
 {
     _plugboard   = new Plugboard();
     _fastRotor   = new RotorSocket(Rotor.Create(RotorVariation.FirstTypeRotor));
     _middleRotor = new RotorSocket(Rotor.Create(RotorVariation.SecondTypeRotor));
     _slowRotor   = new RotorSocket(Rotor.Create(RotorVariation.ThirdTypeRotor));
     _reflector   = new RotorSocket(Reflector.Create(ReflectorVariation.FirstTypeReflector));
 }
Ejemplo n.º 10
0
        public void TestConnections()
        {
            var plugboard         = new Plugboard("ABCKEFGHIJDLNMOPQRSTUZWXYV");
            var rightLeftMappings = AlphabetLetters.Select(c => plugboard.GetMappedLetter(c)).ToArray();
            var leftRightMappings = rightLeftMappings.Select(c => plugboard.GetMappedLetter(c, LetterMapper.MappingDirection.LeftToRight)).ToArray();

            Assert.IsTrue(AlphabetLetters.Zip(leftRightMappings, (c1, c2) => c1 == c2).All(res => res));
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 /// <param name="plugboard">Plugboard.</param>
 /// <param name="left">Left rotor.</param>
 /// <param name="center">Center rotor.</param>
 /// <param name="right">Right rotor.</param>
 /// <param name="reflector">Reflector.</param>
 public Enigma(Plugboard plugboard, Rotor left, Rotor center, Rotor right, Reflector reflector)
 {
     _plugboard = plugboard;
     _left      = left;
     _right     = right;
     _center    = center;
     _reflector = reflector;
 }
Ejemplo n.º 12
0
        public void Plugboard_InitializedWithConfiguration_ConfigurationSet()
        {
            var plugCableConfiguration = MockData.plugboardTestConfiguration1;
            var plugboard = new Plugboard(plugCableConfiguration);

            plugboard.PlugCableConfiguration.Should()
            .BeEquivalentTo(plugCableConfiguration);
        }
Ejemplo n.º 13
0
        public void Plugboard_UnknownKeyEntered_ArgumentExceptionRaised()
        {
            var plugboard = new Plugboard();

            Action act = () => plugboard.ProcessKey(Key.Unknown);

            act.Should()
            .Throw <ArgumentException>();
        }
Ejemplo n.º 14
0
        public void Plugboard_PlugCableConfigurationReset_ConfigurationCleared()
        {
            var plugboard = new Plugboard(MockData.plugboardTestConfiguration1);

            plugboard.ResetPlugCableConfiguration();

            plugboard.PlugCableConfiguration.Should()
            .BeEmpty();
        }
Ejemplo n.º 15
0
        public void Plugboard_PlugCableConfigurationSet_ConfigurationSet()
        {
            var plugboard = new Plugboard();

            plugboard.SetPlugCableConfiguration(MockData.plugboardTestConfiguration1);

            plugboard.PlugCableConfiguration.Should()
            .BeEquivalentTo(MockData.plugboardTestConfiguration1);
        }
Ejemplo n.º 16
0
        public void Plugboard_NullPlugCableConfigurationSet_ArgumentNullException()
        {
            var plugboard = new Plugboard();

            Action act = () => plugboard.SetPlugCableConfiguration(null);

            act.Should()
            .Throw <ArgumentNullException>();
        }
Ejemplo n.º 17
0
        public void PlugboardNotConfigured_KeyEntered_KeyEnteredTriggersEvent()
        {
            var plugboard  = new Plugboard();
            var keyPressed = Key.A;

            var newKey = plugboard.ProcessKey(keyPressed);

            newKey.Should()
            .Be(keyPressed);
        }
Ejemplo n.º 18
0
        public void CheckPlugboardReturnsCorrectForUnmapped()
        {
            Plugboard p = new Plugboard(new Dictionary <Letters, Letters> {
                { Letters.A, Letters.B }
            });

            Letters result = p.GetOutput(Letters.C);

            Assert.That(result, Is.EqualTo(Letters.C));
        }
        public void ConvertLetter_ShouldReturnLetter_WhenKeyDoesntExists()
        {
            // Arrange
            Plugboard plugboard = new Plugboard();

            plugboard.SetWiring('a', 'k');

            // Assert
            Assert.AreEqual('f', plugboard.ConvertLetter('f'));
        }
Ejemplo n.º 20
0
        public void TestNoConnection()
        {
            var plugboard         = new Plugboard();
            var rightLeftMappings = AlphabetLetters.Select(c => plugboard.GetMappedLetter(c)).ToArray();
            var leftRightMappings = AlphabetLetters.Select(c => plugboard.GetMappedLetter(c, LetterMapper.MappingDirection.LeftToRight)).ToArray();

            Assert.IsTrue(rightLeftMappings.Zip(leftRightMappings, (c1, c2) => c1 == c2).All(res => res));

            Assert.IsTrue(rightLeftMappings.Zip(AlphabetLetters, (c1, c2) => c1 == c2).All(res => res));
        }
Ejemplo n.º 21
0
        public void Plugboard_PlugCableAddedToConfiguration_ConfigurationChanged(Key key1, Key key2)
        {
            var plugboard = new Plugboard();
            var plugCable = new PlugCable(key1, key2);

            plugboard.InsertPlugCable(plugCable);

            plugboard.PlugCableConfiguration.Should()
            .Contain(plugCable).And
            .HaveCount(1);
        }
Ejemplo n.º 22
0
        public void KeyboardWithPlugboard_KeyPressedNoConfiguration_KeyReturned(Key keyPressed)
        {
            var plugboard = new Plugboard();
            var keyboard  = new Keyboard(plugboard);

            using var monitoredSubject = keyboard.Monitor();
            keyboard.OnKeyPressed(keyPressed);

            monitoredSubject.Should()
            .Raise(nameof(IKeyboard.KeyProvidedEvent))
            .WithArgs <KeyPressedEventArgs>(x => x.KeyPressed == keyPressed);
        }
Ejemplo n.º 23
0
        public void Plugboard_AddPlugCableAlreadyAdded_ExceptionRaised()
        {
            var configuration = new List <PlugCable> {
                MockData.testPlugCableDifferentKeys1
            };
            var plugboard = new Plugboard(configuration);

            Action act = () => plugboard.InsertPlugCable(MockData.testPlugCableDifferentKeys1);

            act.Should()
            .Throw <PlugboardConfigurationException>();
        }
        public void SetWiring_ShouldSetCountTo2_WhenAddingOnePair()
        {
            // Arrange
            Plugboard plugboard = new Plugboard();

            // Act
            plugboard.SetWiring('a', 'h');
            var wiring = plugboard.GetWiring();

            // Assert
            Assert.AreEqual(2, wiring.Count);
        }
Ejemplo n.º 25
0
        public void PlugboardConfigured_KeyEntered_KeyEnteredTriggersEvent(Key plugA, Key plugB, Key keyEntered, Key keyReturned)
        {
            var configuration = new List <PlugCable>()
            {
                new PlugCable(plugA, plugB)
            };
            var plugboard = new Plugboard(configuration);

            var newKey = plugboard.ProcessKey(keyEntered);

            newKey.Should()
            .Be(keyReturned);
        }
        public void RemoveWiring_ShouldThrow_IfSettingLessThan0()
        {
            // Arrange
            Plugboard plugboard    = new Plugboard();
            int       initNumPairs = plugboard.NumberPairs;

            // Act
            plugboard.RemoveWiring('a', 'b');
            //Assert.ThrowsException<ArgumentException>( () => plugboard.RemoveWiring('a'));

            // Assert
            Assert.IsTrue(0 == plugboard.NumberPairs);
        }
        public void RemoveWiring_ShouldThrow_IfKeyDoesntExist()
        {
            // Arrange
            Plugboard plugboard = new Plugboard();

            plugboard.SetWiring('b', 'x');

            // Act Assert
            plugboard.RemoveWiring('c', 'x');

            // Assert
            Assert.IsTrue(2 == plugboard.GetWiring().Count);
        }
        public void SetWiring_ShouldAdd1Wiring_WhenDuplicateKey()
        {
            // Arrange
            Plugboard plugboard = new Plugboard();

            // Act
            plugboard.SetWiring('a', 'h');
            plugboard.SetWiring('a', 'i');
            var wiring = plugboard.GetWiring();

            // Assert
            Assert.AreEqual(2, wiring.Count);
            Assert.AreEqual('i', wiring['a']);
        }
Ejemplo n.º 29
0
        public void Plugboard_AddPlugCableKeyAlreadyConfigured_ExceptionRaised()
        {
            var plugCable1    = new PlugCable(Key.A, Key.C);
            var plugCable2    = new PlugCable(Key.A, Key.D);
            var configuration = new List <PlugCable> {
                plugCable1
            };
            var plugboard = new Plugboard(configuration);

            Action act = () => plugboard.InsertPlugCable(plugCable2);

            act.Should()
            .Throw <PlugboardConfigurationException>();
        }
        public void SetWiring_ShouldOnlyHaveCount2_WhenAddingDuplicateWireEndpont()
        {
            // Arrange
            Plugboard plugboard = new Plugboard();

            // Act
            plugboard.SetWiring('a', 'h');
            plugboard.SetWiring('a', 'i');
            var wiring = plugboard.GetWiring();

            // Assert
            Assert.AreEqual(2, wiring.Count);
            Assert.AreEqual('i', wiring['a']);
        }
Ejemplo n.º 31
0
    public void TranslateEnigmaMessage()
    {
        var wireConfig = "ABCDEFGHIJZYXWVUTSRQ";
        var pb         = new Plugboard(wireConfig);
        var plain      = "THE ENIGMA MACHINE CANNOT BE CRACKED";
        var expected   = "SGF FNJHMB MBDGJNF DBNNOS AF DQBDKFC";

        var encrypted = plain.Select(c => pb.process(c));

        Assert.AreEqual(expected, encrypted, "Invalid encryption for '" + wireConfig + '"');

        var decrypted = encrypted.Select(c => pb.process(c));

        Assert.AreEqual(plain, decrypted, "Invalid encryption for '" + wireConfig + '"');
    }