コード例 #1
0
ファイル: Program.cs プロジェクト: SparkDustJoe/NorxManaged
        static void Main(string[] args)
        {
            NorxManaged.TestCases tc = new TestCases();
            WriteThis("### Type A Tests = Disconnected Tag ### Type B Tests = Tag Integral with Ciphertext ###", true, WType.Info);
            // TYPE A
            WriteThis("== Tests Type A ==================================== ", true, WType.Heading);
            for (int TESTCASENUM = 0; TESTCASENUM < tc.Cases32.Length; TESTCASENUM++)
            {
                WriteThis("-- 32 TEST " + TESTCASENUM + " -- Disconnected Tag --", true, WType.Heading);
                TestCases.TestCase tcx32   = tc.Cases32[TESTCASENUM];
                byte[]             output  = null;
                byte[]             output2 = null;
                byte[]             tag     = null;
                int outcome = NorxManaged.Norx32.Encrypt_Detached(
                    tcx32.Header,
                    tcx32.Payload,
                    tcx32.Trailer,
                    tcx32.Key, tcx32.Nonce,
                    tcx32.Rounds, tcx32.Parallelism,
                    tcx32.TagSizeBits,
                    out output,
                    out tag);
                string expected     = TestCases.BytesToHexString(tcx32.ResultingCT);
                string expectedTag  = TestCases.BytesToHexString(tcx32.ResultingTag);
                string resultOutput = TestCases.BytesToHexString(output);
                string resultTag    = TestCases.BytesToHexString(tag);
                if (expected.CompareTo(resultOutput) != 0)
                {
                    WriteThis("  CIPHERTEXT:     *FAIL!*", true, WType.Error);
                }
                else
                {
                    WriteThis("  CIPHERTEXT:     -PASS-", true, WType.Awesome);
                    if (expectedTag.CompareTo(resultTag) != 0)
                    {
                        WriteThis("  TAG:            *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  TAG:            -PASS-", true, WType.Awesome);
                        outcome = NorxManaged.Norx32.DecryptVerify_Detached(
                            tcx32.Header,
                            output,
                            tcx32.Trailer,
                            tcx32.Key, tcx32.Nonce,
                            tcx32.Rounds, tcx32.Parallelism,
                            tag,
                            out output2);
                        expected     = TestCases.BytesToHexString(tcx32.Payload);
                        resultOutput = TestCases.BytesToHexString(output2);
                        if (outcome == -1)
                        {
                            WriteThis("  TAG VERIFY:     *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  TAG VERIFY:     -PASS-", true, WType.Awesome);
                            if (expected.CompareTo(resultOutput) != 0)
                            {
                                WriteThis("  PLAINTEXT:      *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  PLAINTEXT:      -PASS-", true, WType.Awesome);
                            }
                        }
                    }
                }
                // MEMORY STREAM TESTS
                WriteThis("-- 32 TEST " + TESTCASENUM + " -- MS Disconnected Tag --", true, WType.Heading);
                using (MemoryStream outputMS = new MemoryStream(0))
                    using (MemoryStream outputTAG = new MemoryStream(0))
                    {
                        outcome = NorxManaged.Norx32.EncryptStream_Detached(
                            new MemoryStream(tcx32.Header),
                            new MemoryStream(tcx32.Payload),
                            new MemoryStream(tcx32.Trailer),
                            tcx32.Key, tcx32.Nonce,
                            tcx32.Rounds, tcx32.Parallelism,
                            tcx32.TagSizeBits,
                            outputMS, outputTAG);
                        expected     = TestCases.BytesToHexString(tcx32.ResultingCT);
                        expectedTag  = TestCases.BytesToHexString(tcx32.ResultingTag);
                        resultOutput = TestCases.BytesToHexString(outputMS.ToArray());
                        resultTag    = TestCases.BytesToHexString(outputTAG.ToArray());
                        if (expected.CompareTo(resultOutput) != 0)
                        {
                            WriteThis("  MS CIPHERTEXT:  *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  MS CIPHERTEXT:  -PASS-", true, WType.Awesome);
                            if (expectedTag.CompareTo(resultTag) != 0)
                            {
                                WriteThis("  MS TAG:         *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  MS TAG:         -PASS-", true, WType.Awesome);
                                outputMS.Seek(0, SeekOrigin.Begin);
                                using (MemoryStream outputMS2 = new MemoryStream(0))
                                {
                                    outcome = NorxManaged.Norx32.DecryptVerifyStream_Detached(
                                        new MemoryStream(tcx32.Header),
                                        outputMS,
                                        new MemoryStream(tcx32.Trailer),
                                        tcx32.Key, tcx32.Nonce,
                                        tcx32.Rounds, tcx32.Parallelism,
                                        outputTAG.ToArray(),
                                        outputMS2);
                                    expected     = TestCases.BytesToHexString(tcx32.Payload);
                                    resultOutput = TestCases.BytesToHexString(outputMS2.ToArray());
                                    if (outcome == -1)
                                    {
                                        WriteThis("  MS TAG VERIFY:  *FAIL!*", true, WType.Error);
                                    }
                                    else
                                    {
                                        WriteThis("  TAG VERIFY:     -PASS-", true, WType.Awesome);
                                        if (expected.CompareTo(resultOutput) != 0)
                                        {
                                            WriteThis("  MS PLAINTEXT:   *FAIL!*", true, WType.Error);
                                        }
                                        else
                                        {
                                            WriteThis("  MS PLAINTEXT:   -PASS-", true, WType.Awesome);
                                        }
                                    }
                                }
                            }
                        }
                    }
            }
            ////64BIT TYPE A==========================================================
            for (int TESTCASENUM = 0; TESTCASENUM < tc.Cases64.Length; TESTCASENUM++)
            {
                WriteThis("-- 64 TEST " + TESTCASENUM + " -- Disconnected Tag", true, WType.Heading);
                TestCases.TestCase tcx64   = tc.Cases64[TESTCASENUM];
                byte[]             output  = null;
                byte[]             output2 = null;
                byte[]             tag     = null;
                int outcome = NorxManaged.Norx64.Encrypt_Detached(
                    tcx64.Header,
                    tcx64.Payload,
                    tcx64.Trailer,
                    tcx64.Key, tcx64.Nonce,
                    tcx64.Rounds, tcx64.Parallelism,
                    tcx64.TagSizeBits,
                    out output,
                    out tag);
                string expected     = TestCases.BytesToHexString(tcx64.ResultingCT);
                string expectedTag  = TestCases.BytesToHexString(tcx64.ResultingTag);
                string resultOutput = TestCases.BytesToHexString(output);
                string resultTag    = TestCases.BytesToHexString(tag);
                if (expected.CompareTo(resultOutput) != 0)
                {
                    Debug.Print("*CIPHERTEXT FAIL:\r\n-EXPECTED:" + expected);
                    Debug.Print("-RESULT  :" + resultOutput);
                    WriteThis("  CIPHERTEXT:     *FAIL!*", true, WType.Error);
                }
                else
                {
                    WriteThis("  CIPHERTEXT:     -PASS-", true, WType.Awesome);
                    if (expectedTag.CompareTo(resultTag) != 0)
                    {
                        WriteThis("  TAG:            *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  TAG:            -PASS-", true, WType.Awesome);
                        outcome = NorxManaged.Norx64.DecryptVerify_Detached(
                            tcx64.Header,
                            output,
                            tcx64.Trailer,
                            tcx64.Key, tcx64.Nonce,
                            tcx64.Rounds, tcx64.Parallelism,
                            tag,
                            out output2);
                        expected     = TestCases.BytesToHexString(tcx64.Payload);
                        resultOutput = TestCases.BytesToHexString(output2);
                        if (outcome == -1)
                        {
                            WriteThis("  TAG VERIFY:     *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  TAG VERIFY:     -PASS-", true, WType.Awesome);
                            if (expected.CompareTo(resultOutput) != 0)
                            {
                                WriteThis("  PLAINTEXT:      *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  PLAINTEXT:      -PASS-", true, WType.Awesome);
                            }
                        }
                    }
                }
                // MEMORY STREAM TESTS
                WriteThis("-- 64 TEST " + TESTCASENUM + " -- MS Disconnected Tag --", true, WType.Heading);
                using (MemoryStream outputMS = new MemoryStream(0))
                    using (MemoryStream outputTAG = new MemoryStream(0))
                    {
                        outcome = NorxManaged.Norx64.EncryptStream_Detached(
                            new MemoryStream(tcx64.Header),
                            new MemoryStream(tcx64.Payload),
                            new MemoryStream(tcx64.Trailer),
                            tcx64.Key, tcx64.Nonce,
                            tcx64.Rounds, tcx64.Parallelism,
                            tcx64.TagSizeBits,
                            outputMS, outputTAG);
                        expected     = TestCases.BytesToHexString(tcx64.ResultingCT);
                        expectedTag  = TestCases.BytesToHexString(tcx64.ResultingTag);
                        resultOutput = TestCases.BytesToHexString(outputMS.ToArray());
                        resultTag    = TestCases.BytesToHexString(outputTAG.ToArray());
                        if (expected.CompareTo(resultOutput) != 0)
                        {
                            Debug.Print("*CIPHERTEXT FAIL:\r\n-EXPECTED:" + expected);
                            Debug.Print("-RESULT  :" + resultOutput);
                            WriteThis("  MS CIPHERTEXT:  *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  MS CIPHERTEXT:  -PASS-", true, WType.Awesome);
                            if (expectedTag.CompareTo(resultTag) != 0)
                            {
                                Debug.Print("*TAG FAIL:\r\n-EXPECTED:" + expectedTag);
                                Debug.Print("-RESULT  :" + resultTag);
                                WriteThis("  MS TAG:         *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  MS TAG:         -PASS-", true, WType.Awesome);
                                outputMS.Seek(0, SeekOrigin.Begin);
                                using (MemoryStream outputMS2 = new MemoryStream(0))
                                {
                                    outcome = NorxManaged.Norx64.DecryptVerifyStream_Detached(
                                        new MemoryStream(tcx64.Header),
                                        outputMS,
                                        new MemoryStream(tcx64.Trailer),
                                        tcx64.Key, tcx64.Nonce,
                                        tcx64.Rounds, tcx64.Parallelism,
                                        outputTAG.ToArray(),
                                        outputMS2);
                                    expected     = TestCases.BytesToHexString(tcx64.Payload);
                                    resultOutput = TestCases.BytesToHexString(outputMS2.ToArray());
                                    if (outcome == -1)
                                    {
                                        WriteThis("  MS TAG VERIFY:  *FAIL!*", true, WType.Error);
                                    }
                                    else
                                    {
                                        WriteThis("  MS TAG VERIFY:  -PASS-", true, WType.Awesome);
                                        if (expected.CompareTo(resultOutput) != 0)
                                        {
                                            WriteThis("  MS PLAINTEXT:   *FAIL!*", true, WType.Error);
                                        }
                                        else
                                        {
                                            WriteThis("  MS PLAINTEXT:   -PASS-", true, WType.Awesome);
                                        }
                                    }
                                }
                            }
                        }
                    }
            }
            // TYPE B=================================================================================
            WriteThis("== Tests Type B ==================================== ", true, WType.Heading);
            for (int TESTCASENUM = 0; TESTCASENUM < tc.Cases32.Length; TESTCASENUM++)
            {
                WriteThis("-- 32 TEST " + TESTCASENUM + " -- Integral Tag", true, WType.Heading);
                TestCases.TestCase tcx32   = tc.Cases32[TESTCASENUM];
                byte[]             output  = null;
                byte[]             output2 = null;
                int outcome = NorxManaged.Norx32.Encrypt(
                    tcx32.Header,
                    tcx32.Payload,
                    tcx32.Trailer,
                    tcx32.Key, tcx32.Nonce,
                    tcx32.Rounds, tcx32.Parallelism,
                    tcx32.TagSizeBits,
                    out output);
                string expected     = TestCases.BytesToHexString(tcx32.ResultingCT) + TestCases.BytesToHexString(tcx32.ResultingTag);
                string resultOutput = TestCases.BytesToHexString(output);
                if (expected.CompareTo(resultOutput) != 0)
                {
                    WriteThis("  CIPHERTEXT/TAG: *FAIL!*", true, WType.Error);
                }
                else
                {
                    WriteThis("  CIPHERTEXT/TAG: -PASS-", true, WType.Awesome);
                    outcome = NorxManaged.Norx32.DecryptVerify(
                        tcx32.Header,
                        output,
                        tcx32.Trailer,
                        tcx32.Key, tcx32.Nonce,
                        tcx32.Rounds, tcx32.Parallelism,
                        tcx32.TagSizeBits,
                        out output2);
                    expected     = TestCases.BytesToHexString(tcx32.Payload);
                    resultOutput = TestCases.BytesToHexString(output2);
                    if (outcome == -1)
                    {
                        WriteThis("  TAG VERIFY:     *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  TAG VERIFY:     -PASS-", true, WType.Awesome);
                        if (expected.CompareTo(resultOutput) != 0)
                        {
                            WriteThis("  PLAINTEXT:      *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  PLAINTEXT:      -PASS-", true, WType.Awesome);
                        }
                    }
                }
                // MEMORY STREAM TESTS
                WriteThis("-- 32 TEST " + TESTCASENUM + " -- MS Integral Tag", true, WType.Heading);
                using (MemoryStream outputMS = new MemoryStream(0))
                {
                    outcome = NorxManaged.Norx32.EncryptStream(
                        new MemoryStream(tcx32.Header),
                        new MemoryStream(tcx32.Payload),
                        new MemoryStream(tcx32.Trailer),
                        tcx32.Key, tcx32.Nonce,
                        tcx32.Rounds, tcx32.Parallelism,
                        tcx32.TagSizeBits,
                        outputMS);
                    expected     = TestCases.BytesToHexString(tcx32.ResultingCT) + TestCases.BytesToHexString(tcx32.ResultingTag);
                    resultOutput = TestCases.BytesToHexString(outputMS.ToArray());
                    if (expected.CompareTo(resultOutput) != 0)
                    {
                        WriteThis("  MS CT/TAG:      *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  MS CT/TAG:      -PASS-", true, WType.Awesome);
                        outputMS.Seek(0, SeekOrigin.Begin);
                        using (MemoryStream outputMS2 = new MemoryStream(0))
                        {
                            outcome = NorxManaged.Norx32.DecryptVerifyStream(
                                new MemoryStream(tcx32.Header),
                                outputMS,
                                new MemoryStream(tcx32.Trailer),
                                tcx32.Key, tcx32.Nonce,
                                tcx32.Rounds, tcx32.Parallelism,
                                tcx32.TagSizeBits,
                                outputMS2);
                            expected     = TestCases.BytesToHexString(tcx32.Payload);
                            resultOutput = TestCases.BytesToHexString(outputMS2.ToArray());
                            if (outcome == -1)
                            {
                                WriteThis("  MS TAG VERIFY:  *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  MS TAG VERIFY:  -PASS-", true, WType.Awesome);
                                if (expected.CompareTo(resultOutput) != 0)
                                {
                                    WriteThis("  MS PLAINTEXT:   *FAIL!*", true, WType.Error);
                                }
                                else
                                {
                                    WriteThis("  MS PLAINTEXT:   -PASS-", true, WType.Awesome);
                                }
                            }
                        }
                    }
                }
            }
            ////// 64 BIT TYPE B===============================================================================
            for (int TESTCASENUM = 0; TESTCASENUM < tc.Cases64.Length; TESTCASENUM++)
            {
                WriteThis("-- 64 TEST " + TESTCASENUM + " -- Integral Tag", true, WType.Heading);
                TestCases.TestCase tcx64   = tc.Cases64[TESTCASENUM];
                byte[]             output  = null;
                byte[]             output2 = null;
                int outcome = NorxManaged.Norx64.Encrypt(
                    tcx64.Header,
                    tcx64.Payload,
                    tcx64.Trailer,
                    tcx64.Key, tcx64.Nonce,
                    tcx64.Rounds, tcx64.Parallelism,
                    tcx64.TagSizeBits,
                    out output);
                string expected     = TestCases.BytesToHexString(tcx64.ResultingCT) + TestCases.BytesToHexString(tcx64.ResultingTag);
                string resultOutput = TestCases.BytesToHexString(output);
                if (expected.CompareTo(resultOutput) != 0)
                {
                    WriteThis("  CIPHERTEXT/TAG: *FAIL!*", true, WType.Error);
                }
                else
                {
                    WriteThis("  CIPHERTEXT/TAG: -PASS-", true, WType.Awesome);
                    outcome = NorxManaged.Norx64.DecryptVerify(
                        tcx64.Header,
                        output,
                        tcx64.Trailer,
                        tcx64.Key, tcx64.Nonce,
                        tcx64.Rounds, tcx64.Parallelism,
                        tcx64.TagSizeBits,
                        out output2);

                    expected     = TestCases.BytesToHexString(tcx64.Payload);
                    resultOutput = TestCases.BytesToHexString(output2);
                    if (outcome == -1)
                    {
                        WriteThis("  TAG VERIFY:     *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  TAG VERIFY:     -PASS-", true, WType.Awesome);
                        if (expected.CompareTo(resultOutput) != 0)
                        {
                            Debug.Print("*PLAINTEXT  FAIL:\r\n-EXPECTED:" + expected);
                            Debug.Print("-RESULT  :" + resultOutput);
                            WriteThis("  PLAINTEXT:      *FAIL!*", true, WType.Error);
                        }
                        else
                        {
                            WriteThis("  PLAINTEXT:      -PASS-", true, WType.Awesome);
                        }
                    }
                }
                // MEMORY STREAM TESTS
                WriteThis("-- 64 TEST " + TESTCASENUM + " -- MS Integral Tag", true, WType.Heading);
                using (MemoryStream outputMS = new MemoryStream())
                {
                    outcome = NorxManaged.Norx64.EncryptStream(
                        new MemoryStream(tcx64.Header),
                        new MemoryStream(tcx64.Payload),
                        new MemoryStream(tcx64.Trailer),
                        tcx64.Key, tcx64.Nonce,
                        tcx64.Rounds, tcx64.Parallelism,
                        tcx64.TagSizeBits,
                        outputMS);
                    expected     = TestCases.BytesToHexString(tcx64.ResultingCT) + TestCases.BytesToHexString(tcx64.ResultingTag);
                    resultOutput = TestCases.BytesToHexString(outputMS.ToArray());
                    if (expected.CompareTo(resultOutput) != 0)
                    {
                        WriteThis("  MS CT/TAG:      *FAIL!*", true, WType.Error);
                    }
                    else
                    {
                        WriteThis("  MS CT/TAG:      -PASS-", true, WType.Awesome);
                        outputMS.Seek(0, SeekOrigin.Begin);
                        using (MemoryStream outputMS2 = new MemoryStream())
                        {
                            outcome = NorxManaged.Norx64.DecryptVerifyStream(
                                new MemoryStream(tcx64.Header),
                                outputMS,
                                new MemoryStream(tcx64.Trailer),
                                tcx64.Key, tcx64.Nonce,
                                tcx64.Rounds, tcx64.Parallelism,
                                tcx64.TagSizeBits,
                                outputMS2);
                            expected     = TestCases.BytesToHexString(tcx64.Payload);
                            resultOutput = TestCases.BytesToHexString(outputMS2.ToArray());
                            if (outcome == -1)
                            {
                                WriteThis("  MS TAG VERIFY:  *FAIL!*", true, WType.Error);
                            }
                            else
                            {
                                WriteThis("  MS TAG VERIFY:  -PASS-", true, WType.Awesome);
                                if (expected.CompareTo(resultOutput) != 0)
                                {
                                    Debug.Print("*PLAINTEXT  FAIL:\r\n-EXPECTED:" + expected);
                                    Debug.Print("-RESULT  :" + resultOutput);
                                    WriteThis("  MS PLAINTEXT:   *FAIL!*", true, WType.Error);
                                }
                                else
                                {
                                    WriteThis("  MS PLAINTEXT:   -PASS-", true, WType.Awesome);
                                }
                            }
                        }
                    }
                }
            }
            while (Console.KeyAvailable)
            {
                Console.ReadKey(true);
            }
            Console.WriteLine("Press ENTER to exit...");
            Console.ReadLine();
        }