Example #1
0
        public void TestDecodingDoubleStep()
        {
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(21);
            settings.RotorPositions.Add(4);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.B;

            scramblerUnit = new ScramblerUnitBase(settings);

            Assert.AreEqual(21, scramblerUnit.RotorPositions[0]);
            Assert.AreEqual(4, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);

            Assert.AreEqual <string>("T", scramblerUnit.Scramble("Y"));
            Assert.AreEqual <string>("E", scramblerUnit.Scramble("B"));
            Assert.AreEqual <string>("S", scramblerUnit.Scramble("G"));
            Assert.AreEqual <string>("T", scramblerUnit.Scramble("F"));
            Assert.AreEqual <string>("I", scramblerUnit.Scramble("J"));
            Assert.AreEqual <string>("N", scramblerUnit.Scramble("W"));
            Assert.AreEqual <string>("G", scramblerUnit.Scramble("Q"));
        }
Example #2
0
        public void TestDecodingNoStep()
        {
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.B;

            scramblerUnit = new ScramblerUnitBase(settings);

            Assert.AreEqual(1, scramblerUnit.RotorPositions[0]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);

            Assert.AreEqual <string>("T", scramblerUnit.Scramble("O"));
            Assert.AreEqual <string>("E", scramblerUnit.Scramble("L"));
            Assert.AreEqual <string>("S", scramblerUnit.Scramble("P"));
            Assert.AreEqual <string>("T", scramblerUnit.Scramble("F"));
            Assert.AreEqual <string>("I", scramblerUnit.Scramble("D"));
            Assert.AreEqual <string>("N", scramblerUnit.Scramble("E"));
            Assert.AreEqual <string>("G", scramblerUnit.Scramble("Z"));
        }
Example #3
0
        public void TestEncodingSingleStepKnownWorkingExample()
        {
            // Reflector B I II III
            // 1 1 26
            // Knowing working traversal (input) rotors | rotors (output)
            // (A) B J Z | T L K (U)
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(26);
            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.B;

            scramblerUnit = new ScramblerUnitBase(settings);

            // (A) B J Z | T L K (U)
            // (1) 2 10 26 | 20 12 11 (21)
            Assert.AreEqual <string>("U", scramblerUnit.Scramble("A"));

            // (A) B E S | F D D (B)
            // (1) 2 5 19 | 6 4 4 (2)
            Assert.AreEqual <string>("B", scramblerUnit.Scramble("A"));

            Assert.AreEqual <string>("D", scramblerUnit.Scramble("A"));
            Assert.AreEqual <string>("Z", scramblerUnit.Scramble("A"));
            Assert.AreEqual <string>("G", scramblerUnit.Scramble("A"));
        }
Example #4
0
        public void TestEncodingAlphabet()
        {
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.B;

            scramblerUnit = new ScramblerUnitBase(settings);

            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[0]);

            Assert.AreEqual <string>("B", scramblerUnit.Scramble("A"));
            Assert.AreEqual <string>("J", scramblerUnit.Scramble("B"));
            Assert.AreEqual <string>("E", scramblerUnit.Scramble("C"));
            Assert.AreEqual <string>("L", scramblerUnit.Scramble("D"));
            Assert.AreEqual <string>("R", scramblerUnit.Scramble("E"));

            Assert.AreEqual <string>("Q", scramblerUnit.Scramble("F"));
            Assert.AreEqual <string>("Z", scramblerUnit.Scramble("G"));
            Assert.AreEqual <string>("V", scramblerUnit.Scramble("H"));
            Assert.AreEqual <string>("J", scramblerUnit.Scramble("I"));
            Assert.AreEqual <string>("W", scramblerUnit.Scramble("J"));

            Assert.AreEqual <string>("A", scramblerUnit.Scramble("K"));
            Assert.AreEqual <string>("R", scramblerUnit.Scramble("L"));
            Assert.AreEqual <string>("X", scramblerUnit.Scramble("M"));
            Assert.AreEqual <string>("S", scramblerUnit.Scramble("N"));
            Assert.AreEqual <string>("N", scramblerUnit.Scramble("O"));

            Assert.AreEqual <string>("B", scramblerUnit.Scramble("P"));
            Assert.AreEqual <string>("X", scramblerUnit.Scramble("Q"));
            Assert.AreEqual <string>("O", scramblerUnit.Scramble("R"));
            Assert.AreEqual <string>("R", scramblerUnit.Scramble("S"));
            Assert.AreEqual <string>("S", scramblerUnit.Scramble("T"));

            Assert.AreEqual <string>("T", scramblerUnit.Scramble("U"));
            Assert.AreEqual <string>("N", scramblerUnit.Scramble("V"));
            Assert.AreEqual <string>("C", scramblerUnit.Scramble("W"));
            Assert.AreEqual <string>("F", scramblerUnit.Scramble("X"));
            Assert.AreEqual <string>("M", scramblerUnit.Scramble("Y"));
            Assert.AreEqual <string>("E", scramblerUnit.Scramble("Z"));

            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(2, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(1, scramblerUnit.RotorPositions[0]);
        }
Example #5
0
        public void DoubleRotorStepTest()
        {
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(21);
            settings.RotorPositions.Add(4);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.A;

            scramblerUnit = new ScramblerUnitBase(settings);

            // Check initial wheel positions
            // ADU — normal step of right rotor

            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(4, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(21, scramblerUnit.RotorPositions[0]);

            // ADV — right rotor(III)goes in V—notch position
            scramblerUnit.Scramble("T");

            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(4, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(22, scramblerUnit.RotorPositions[0]);

            // AEW — right rotor steps, takes middle rotor(II) one step further, which is now in its own E—notch position
            scramblerUnit.Scramble("T");

            Assert.AreEqual(1, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(5, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(23, scramblerUnit.RotorPositions[0]);

            // BFX — normal step of right rotor, double step of middle rotor, normal step of left rotor
            scramblerUnit.Scramble("T");

            Assert.AreEqual(2, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(6, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(24, scramblerUnit.RotorPositions[0]);

            // BFY — normal step of right rotor
            scramblerUnit.Scramble("T");

            Assert.AreEqual(2, scramblerUnit.RotorPositions[2]);
            Assert.AreEqual(6, scramblerUnit.RotorPositions[1]);
            Assert.AreEqual(25, scramblerUnit.RotorPositions[0]);
        }
Example #6
0
        public void Initialize()
        {
            EnigmaSettings settings = new EnigmaSettings();

            settings.Rotors.Add(Constants.Rotors.III);
            settings.Rotors.Add(Constants.Rotors.II);
            settings.Rotors.Add(Constants.Rotors.I);

            settings.RotorPositions.Add(21);
            settings.RotorPositions.Add(1);
            settings.RotorPositions.Add(1);

            settings.Reflector = Constants.Reflectors.B;

            scramblerUnit = new ScramblerUnitBase(settings);
        }
Example #7
0
 public EnigmaMachineBase(IPlugboard plugBoard, IScramblerUnit scramblerUnit)
 {
     PlugBoard     = plugBoard;
     ScramblerUnit = scramblerUnit;
 }
Example #8
0
 public void Cleanup()
 {
     scramblerUnit = null;
 }