예제 #1
0
        public char GetMappedLetter(char letter, LetterMapper.MappingDirection direction = LetterMapper.MappingDirection.RightToLeft)
        {
            var entryLetter = GetEntryLetter(letter);
            char mappedLetter = _rotor.GetMappedLetter(entryLetter, direction);

            return GetOutputLetter(mappedLetter);
        }
예제 #2
0
        public void CheckMapsString()
        {
            string expectedResult = "ABC";

            string actualResult = LetterMapper.CreateLettersString(new Letters[] { Letters.A, Letters.B, Letters.C });

            Assert.That(actualResult, Is.EqualTo(expectedResult));
        }
예제 #3
0
        public void CheckEntryWheelGivesCorrectOutputValue()
        {
            EntryWheel e = new EntryWheel(LetterMapper.CreateLettersArray("QWERTZUIOASDFGHJKPYXCVBNML"));

            Letters result = e.GetOutput(Letters.Q);

            Assert.That(result, Is.EqualTo(Letters.A));
        }
예제 #4
0
        public string GetOutput(string text)
        {
            Letters[] inputText = LetterMapper.CreateLettersArray(text);

            Letters[] outputText = new Letters[inputText.Length];

            for (int i = 0; i < inputText.Length; i++)
            {
                outputText[i] = GetOutput(inputText[i]);
            }

            return(LetterMapper.CreateLettersString(outputText));
        }
예제 #5
0
        public void CheckMapsLetters()
        {
            Letters[] expectedResult = new Letters[]
            {
                Letters.A,
                Letters.B,
                Letters.C
            };

            Letters[] actualResult = LetterMapper.CreateLettersArray("ABC");

            Assert.That(actualResult, Is.EqualTo(expectedResult));
        }
예제 #6
0
        public void CheckReflectorCreatesCorrectOutput()
        {
            Reflector r = new Reflector(LetterMapper.CreateLettersArray("ZYXWVUTSRQPONMLKJIHGFEDCBA"));

            Letters result;

            result = r.GetOutput(Letters.A);

            Assert.That(result, Is.EqualTo(Letters.Z));

            result = r.GetOutput(Letters.Z);

            Assert.That(result, Is.EqualTo(Letters.A));
        }
예제 #7
0
        public void CheckEncypheredMessageDecyphers()
        {
            Scrambler s = new Scrambler3(Reflector.ReflectorB(), Rotor.RotorI(Letters.A, Letters.A), Rotor.RotorII(Letters.A, Letters.A), Rotor.RotorIII(Letters.A, Letters.A));

            Letters[] expectedPlaintext = LetterMapper.CreateLettersArray("THISISMYTESTMESSAGE");

            Letters[] cyphertext = LetterMapper.CreateLettersArray("OPGNDXOEHCJEXBEDDUO");

            Letters[] plaintext = new Letters[cyphertext.Length];

            for (int i = 0; i < cyphertext.Length; i++)
            {
                plaintext[i] = s.GetOutput(cyphertext[i]);
            }

            Assert.That(plaintext, Is.EqualTo(expectedPlaintext));
        }
예제 #8
0
        public void CheckEncypheredMessageDecyphersWithRolloverAndRingF()
        {
            Scrambler s = new Scrambler3(Reflector.ReflectorB(), Rotor.RotorI(Letters.A, Letters.A), Rotor.RotorII(Letters.A, Letters.A), Rotor.RotorIII(Letters.F, Letters.A));

            Letters[] expectedPlaintext = LetterMapper.CreateLettersArray("THISMESSAGEWILLCAUSEROLLOVER");

            Letters[] cyphertext = LetterMapper.CreateLettersArray("UFVWRFXPGFNQBAPWSVNSFXOGCPPK");

            Letters[] plaintext = new Letters[cyphertext.Length];

            for (int i = 0; i < cyphertext.Length; i++)
            {
                plaintext[i] = s.GetOutput(cyphertext[i]);
            }

            Assert.That(plaintext, Is.EqualTo(expectedPlaintext));
        }
예제 #9
0
        public void CheckEncypheredMessageDecyphersWithMoreRollover()
        {
            Scrambler s = new Scrambler3(Reflector.ReflectorB(), Rotor.RotorI(Letters.A, Letters.A), Rotor.RotorII(Letters.A, Letters.A), Rotor.RotorIII(Letters.A, Letters.A));

            Letters[] expectedPlaintext = LetterMapper.CreateLettersArray("BAUSSRLQONWLBSZPPAORUKKJPRUYZNOLRKKHFMLJRAVSPOJVTPGHRBLEPRVPZMZYNTBWBISKQUBDWIENKKPHHDZIXBUSROMKSBITTAKICWDIFWPINAMXTHWOOQWZWCEIPGKDRMIGIVRSLCEQGHGKXLCXARNZXWGJSICHWOVIUGPLUVNYYQLOONRJJRQNPSIHYMQXXMUOEEKQPVUFLCPUFFJLFWIDHTVBHFHLCJMKWYZWPJHCOBHYXJEOKOSHCMABEVUNHEFYBMFPQPHVQPLFSYFNESRLWBOIBUEMZHLAZFRJEYGVTSCZTKRTRVOLZEFNZPCYDPCNIYQEEJBNWWXSXSRIYAIVFOUVMBOGQZVWMPYVOAUBIOZWFZVVLGKMCOZMWCSCOXWNJRPPVVUUPRURVIWXIATKFHUTXJSNMHCQLKGTTKAFBTORKWHTUCMTXQJFKORXORVINKXGUNCALBJQHQQEWFCQQMBJYWFAWVSZSMFLHUBZEQYEGPBAXMNYVKJBXRMTLBVZTHPQBRPPSFMQRDLJLVUYUHQRYTEUURQSOGYUAEIJQMXSXFJFTLSOPYJLULMGJGXYBPVJHZAGFIBEPUKKEJMVQMGQMKFMZKXGRKGTSYAZLPUDRRWSOHWC");

            Letters[] cyphertext = LetterMapper.CreateLettersArray("ADFNBTUOMHCRANIBRLEVTHRCQJCBVYGUEOMGUKCDTSUQJCUUOFNEKPBXHMQJKEUIXENMCLAHIWCCTJMSETLDMZWJWIYCCNWUHHHFNBWMBITTGETBVFAFRWUTYMQUPZHHRRHYWEJTBAMKJLILXFAZKDHVLDCXMUXDIQKUAXMUXRFYRDWKFFFHFAAQBKLTJNLBRQYUMXDAQZUDTGWGRGITLHPXPDMVOMDWOVBMKRGTRXUKNEDMNILPHYGNJJVOPXZRPRWAQSXERTQVXFPXVVZNTVXAYKLMVUEYZGQOLQSBEVYLRFOQSDUUMLPKAXLWRNBCMCNEFQMERXFIDSNGLBAMVBYOFVUOGNTOLSFKCROCEGOELRWSZTHDNHHISITKKDDUVEKLLDEGCPHWERBOLVTPQQVFBHDDYDSFDYKQLQTCJBUQYGVHVMSOOEDCEUBBPFQPGNIMTTZNSNDTFPMCODOLRZKXHBNTDTQYDNVZZBATJVLQVSVBGVEDBRWQAQUUPTTDPSGZJUWXVOUHNWQMQXHZABKGNUVPELJHVGORJXDYDFINOOYQAFKYORUPEBKNSCOARUUTSAGLWGILXMEPXDYJMSHXQOQRNAQYVJTETTZZPTQUEXYREZOXJTFCJNPK");

            Letters[] plaintext = new Letters[cyphertext.Length];

            for (int i = 0; i < cyphertext.Length; i++)
            {
                plaintext[i] = s.GetOutput(cyphertext[i]);
            }

            Assert.That(plaintext, Is.EqualTo(expectedPlaintext));
        }
예제 #10
0
        public void CheckEncypheredMessageDecyphersWithRollover()
        {
            Scrambler s = new Scrambler3(Reflector.ReflectorB(), Rotor.RotorI(Letters.A, Letters.A), Rotor.RotorII(Letters.A, Letters.A), Rotor.RotorIII(Letters.A, Letters.A));

            Letters[] expectedPlaintext = LetterMapper.CreateLettersArray("THISISALONGMESSAGETOTESTROLLOVERINTHEROTORS");

            Letters[] cyphertext = LetterMapper.CreateLettersArray("OPGNDXCGMHUNLNECJZGJUPLWOVMOJFUJWQXGSUDEJVY");

            Letters[] plaintext = new Letters[cyphertext.Length];

            for (int i = 0; i < cyphertext.Length; i++)
            {
                plaintext[i] = s.GetOutput(cyphertext[i]);
            }

            Assert.That(plaintext, Is.EqualTo(expectedPlaintext));
        }
예제 #11
0
        public void CheckRotorFailsWithMapTooSmall()
        {
            Exception exception = Assert.Throws <Exception>(() => new Rotor(LetterMapper.CreateLettersArray("Z"), Letters.A, Letters.A, Letters.A));

            Assert.That(exception.Message, Is.EqualTo("map is 1 but should be 26"));
        }
예제 #12
0
        public void CheckRotorFailsWithMapDuplicate()
        {
            Exception exception = Assert.Throws <Exception>(() => new Rotor(LetterMapper.CreateLettersArray("ZZXWVUTSRQPONMLKJIHGFEDCBA"), Letters.A, Letters.A, Letters.A));

            Assert.That(exception.Message, Is.EqualTo("duplicate letter Z in map"));
        }
예제 #13
0
        public void CheckRotorFailsWithMapTooBig()
        {
            Exception exception = Assert.Throws <Exception>(() => new Rotor(LetterMapper.CreateLettersArray("zZYXWVUTSRQPONMLKJIHGFEDCBA"), Letters.A, Letters.A, Letters.A));

            Assert.That(exception.Message, Is.EqualTo("map is 27 but should be 26"));
        }
예제 #14
0
        public void CheckReflectorFailsWithMapDirect()
        {
            Exception exception = Assert.Throws <Exception>(() => new Reflector(LetterMapper.CreateLettersArray("ABCDEFGHIJKLMNOPQRSTUVWXYZ")));

            Assert.That(exception.Message, Is.EqualTo("reflector contains direct map for A"));
        }
예제 #15
0
 public void CheckEntryWheelSucceedsWithMapDirect()
 {
     EntryWheel e = new EntryWheel(LetterMapper.CreateLettersArray("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
 }
예제 #16
0
 public void CheckEntryWheelSucceedsWithMapQwertz()
 {
     EntryWheel e = new EntryWheel(LetterMapper.CreateLettersArray("QWERTZUIOASDFGHJKPYXCVBNML"));
 }