Changeset 38 for trunk/Tests


Ignore:
Timestamp:
Nov 20, 2008, 5:32:42 PM (13 years ago)
Author:
Gerhard Junker
Message:

PKCS5 test methods completed (some external references missing)

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:ignore set to
      *.suo
  • trunk/Tests/pkcsTest.cs

    r35 r38  
    1 using System;
     1//////////////////////////////////////////////////////////////////////////////////////////////////
     2// CrypTool V2
     3// © 2008 - Gerhard Junker
     4// Apache License see http://www.apache.org/licenses/
     5//
     6// $HeadURL: https://www.cryptool.org/svn/CrypTool2/trunk/CrypPlugins/PKCS5/SSCpkcs5.cs $
     7//////////////////////////////////////////////////////////////////////////////////////////////////
     8// $Revision:: 30                                                                             $://
     9// $Author:: junker                                                                           $://
     10// $Date:: 2008-11-19 14:13:40 +0100 (Mi, 19 Nov 2008)                                        $://
     11//////////////////////////////////////////////////////////////////////////////////////////////////
     12
     13using System;
    214using System.Text;
    3 using System.Collections.Generic;
    4 using System.Linq;
    515using Microsoft.VisualStudio.TestTools.UnitTesting;
    616
     
    919namespace Tests
    1020{
     21    /// <summary>
     22    /// test methods for PKCS#5 Plugin
     23    /// </summary>
     24    [TestClass]
     25    public class pkcsTest
     26    {
     27        public pkcsTest()
     28        {
     29            // nothing to do
     30        }
    1131
    12         [TestClass]
    13         public class pkcsTest
    14         {
    15                 public pkcsTest()
    16                 {
    17                 }
     32        private TestContext testContextInstance;
     33        public TestContext TestContext
     34        {
     35            get
     36            {
     37                return testContextInstance;
     38            }
     39            set
     40            {
     41                testContextInstance = value;
     42            }
     43        }
    1844
    19                 private TestContext testContextInstance;
    20                 public TestContext TestContext
    21                 {
    22                         get
    23                         {
    24                                 return testContextInstance;
    25                         }
    26                         set
    27                         {
    28                                 testContextInstance = value;
    29                         }
    30                 }
     45        private void pkcs5part(byte[] key, byte[] salt, int hmac, byte[] result )
     46        {
     47            PKCS5Settings set = new PKCS5Settings();
     48            set.Count = 2048;
     49            set.SHAFunction = hmac;
     50            set.Length = 24 * 8; // Length must be in bits and not in bytes
    3151
    32                 #region additional Test attributes
    33                 //
    34                 // Sie können beim Schreiben der Tests folgende zusätzliche Attribute verwenden:
    35                 //
    36                 // Verwenden Sie ClassInitialize, um vor Ausführung des ersten Tests in der Klasse Code auszuführen.
    37                 // [ClassInitialize()]
    38                 // public static void MyClassInitialize(TestContext testContext) { }
    39                 //
    40                 // Verwenden Sie ClassCleanup, um nach Ausführung aller Tests in einer Klasse Code auszuführen.
    41                 // [ClassCleanup()]
    42                 // public static void MyClassCleanup() { }
    43                 //
    44                 // Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen.
    45                 // [TestInitialize()]
    46                 // public void MyTestInitialize() { }
    47                 //
    48                 // Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
    49                 // [TestCleanup()]
    50                 // public void MyTestCleanup() { }
    51                 //
    52                 #endregion
     52            PKCS5.PKCS5 p = new PKCS5.PKCS5();
     53            p.Settings = set;
     54            p.KeyData = key;
     55            p.SaltData = salt;
    5356
    54                 [TestMethod]
    55                 public void pkcs5TestMethodMD5()
    56                 {
    57                         ///
    58                         /// ToDo: find correct Test values
    59                         ///
    60                         byte[] k0 = { };
    61                         byte[] s0 = { };
    62                         byte[] e0 = { 0 };
    63                        
    64                         PKCS5.PKCS5 p = new PKCS5.PKCS5();
     57            p.Hash();
     58            byte[] h = p.HashOutputData;
     59            p.Dispose();
    6560
    66                         PKCS5Settings set = new PKCS5Settings();
     61            //set = (PKCS5.PKCS5Settings)p.Settings;
     62            //testContextInstance.WriteLine("Settings: hash length is   {0} bits.", set.Length);
     63            //testContextInstance.WriteLine("Settings: hash function is {0}.", set.SHAFunction);
     64            //testContextInstance.WriteLine("Settings: hash count is    {0}.", set.Count);
    6765
    68                         p.KeyData = k0;
    69                         p.SaltData = s0;
     66            // both arrays of same size?
     67            Assert.AreEqual(h.Length, result.Length, "Different hash sizes found");
    7068
    71                         set.Count = 1000;
    72                         set.SHAFunction = (int) System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.MD5;
    73                         set.Length = 24 * 8;
     69            string tmp = "expected hash is  ";
     70            foreach (byte b in result)
     71                tmp += b.ToString("x2") + " ";
     72            testContextInstance.WriteLine(tmp);
    7473
    75                         p.Settings = set;
     74            tmp = "calculated hash is ";
     75            foreach (byte b in h)
     76                tmp += b.ToString("x2") + " ";
     77            testContextInstance.WriteLine(tmp);
    7678
    77                         p.Hash();
     79            // the next compares references etc ... but not the array content :-(
     80            // Assert.AreEqual<byte[]>(result, h, "Different hash values found");
     81            // compare by hand ...
     82            for (int i = 0; i < h.Length; i++)
     83            {
     84                Assert.AreEqual(result[i], h[i], "Different hash values found");
     85            }
     86        }
    7887
    79                         byte[] h = p.HashOutputData;
     88        [TestMethod]
     89        public void pkcs5TestMethodMD5()
     90        {
     91            byte[] key = { 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64 };   // "password"
     92            byte[] salt = { 0x78, 0x57, 0x8E, 0x5A, 0x5D, 0x63, 0xCB, 0x06 };
    8093
    81                         //Assert.AreEqual<byte[]>(e0,h); //ToDo
    82                         Assert.IsNull(null);
    83                 }
    84         }
     94            ///
     95            /// referenced test values taken from
     96            /// http://cryptosys.net/cgi-bin/manual.cgi?m=api&name=PBE_Kdf2
     97            ///
     98            //Derived key {HMAC-MD5}    = 66991b7f8010a0ba5d8a2e1e1a38341007f2eda8a79619d6 // reference needed
     99            //Derived key {HMAC-SHA1}   = BFDE6BE94DF7E11DD409BCE20A0255EC327CB936FFE93643
     100            //Derived key {HMAC-SHA256} = 97B5A91D35AF542324881315C4F849E327C4707D1BC9D322
     101            //Derived key {HMAC-SHA384} = bd6078731cef2cf5bdc48748a9da182ddc7b48a3cc28069e // reference needed
     102            //Derived key {HMAC-SHA512} = e6fa68fec0a2be2477809f8983e2719eb29415c61efacf34 // reference needed
     103
     104            byte[] result_MD5    = { 0x66, 0x99, 0x1b, 0x7f, 0x80, 0x10, 0xa0, 0xba, 0x5d, 0x8a, 0x2e, 0x1e, 0x1a, 0x38, 0x34, 0x10, 0x07, 0xf2, 0xed, 0xa8, 0xa7, 0x96, 0x19, 0xd6 };
     105            byte[] result_SHA1   = { 0xBF, 0xDE, 0x6B, 0xE9, 0x4D, 0xF7, 0xE1, 0x1D, 0xD4, 0x09, 0xBC, 0xE2, 0x0A, 0x02, 0x55, 0xEC, 0x32, 0x7C, 0xB9, 0x36, 0xFF, 0xE9, 0x36, 0x43 };
     106            byte[] result_SHA256 = { 0x97, 0xB5, 0xA9, 0x1D, 0x35, 0xAF, 0x54, 0x23, 0x24, 0x88, 0x13, 0x15, 0xC4, 0xF8, 0x49, 0xE3, 0x27, 0xC4, 0x70, 0x7D, 0x1B, 0xC9, 0xD3, 0x22 };
     107            byte[] result_SHA384 = { 0xbd, 0x60, 0x78, 0x73, 0x1c, 0xef, 0x2c, 0xf5, 0xbd, 0xc4, 0x87, 0x48, 0xa9, 0xda, 0x18, 0x2d, 0xdc, 0x7b, 0x48, 0xa3, 0xcc, 0x28, 0x06, 0x9e };
     108            byte[] result_SHA512 = { 0xe6, 0xfa, 0x68, 0xfe, 0xc0, 0xa2, 0xbe, 0x24, 0x77, 0x80, 0x9f, 0x89, 0x83, 0xe2, 0x71, 0x9e, 0xb2, 0x94, 0x15, 0xc6, 0x1e, 0xfa, 0xcf, 0x34};
     109
     110            pkcs5part(key, salt, (int)System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.MD5, result_MD5);
     111            pkcs5part(key, salt, (int)System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.SHA1, result_SHA1);
     112            pkcs5part(key, salt, (int)System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.SHA256, result_SHA256);
     113            pkcs5part(key, salt, (int)System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.SHA384, result_SHA384);
     114            pkcs5part(key, salt, (int)System.Security.Cryptography.PKCS5MaskGenerationMethod.ShaFunction.SHA512, result_SHA512);
     115        }
     116    }
    85117}
Note: See TracChangeset for help on using the changeset viewer.