2 // SymmetricAlgorithm2Test.cs -
3 // Non generated NUnit Test Cases for SymmetricAlgorithm
6 // Sebastien Pouliot <spouliot@ximian.com>
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using NUnit.Framework;
33 using System.Security.Cryptography;
36 namespace MonoTests.System.Security.Cryptography {
38 // SymmetricAlgorithm is a abstract class - so most of it's functionality wont
39 // be tested here (but will be in its descendants).
42 public class SymmetricAlgorithm2Test : Assertion {
44 public void AssertEquals (string msg, byte[] array1, byte[] array2)
46 AllTests.AssertEquals (msg, array1, array2);
50 public void KeySize_SameSize ()
52 using (SymmetricAlgorithm algo = SymmetricAlgorithm.Create ()) {
53 // get a copy of the key
54 byte[] key = algo.Key;
55 int ks = algo.KeySize;
58 // did it change the key ? Yes!
59 Assert ("Key", BitConverter.ToString (key) != BitConverter.ToString (algo.Key));
64 public void BlockSize_SameSize ()
66 using (SymmetricAlgorithm algo = SymmetricAlgorithm.Create ()) {
67 // get a copy of the IV
69 int bs = algo.BlockSize;
72 // did it change the IV ? No!
73 Assert ("IV", BitConverter.ToString (iv) == BitConverter.ToString (algo.IV));
78 [ExpectedException (typeof (CryptographicException))]
79 public void InvalidBlockSize ()
81 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
86 [ExpectedException (typeof (CryptographicException))]
87 public void InvalidFeedbackSize ()
89 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
90 algo.FeedbackSize = algo.BlockSize + 1;
94 [ExpectedException (typeof (ArgumentNullException))]
95 public void IV_Null ()
97 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
103 [ExpectedException (typeof (CryptographicException))]
105 public void IV_None ()
107 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
108 algo.IV = new byte [0]; // e.g. stream ciphers
112 [ExpectedException (typeof (CryptographicException))]
113 public void IV_TooBig ()
115 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
116 algo.IV = new byte [algo.BlockSize + 1];
120 [ExpectedException (typeof (ArgumentNullException))]
121 public void Key_Null ()
123 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
128 [ExpectedException (typeof (CryptographicException))]
129 public void Key_WrongSize ()
131 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
132 algo.Key = new byte [255];
136 [ExpectedException (typeof (CryptographicException))]
137 public void KeySize_WrongSize ()
139 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
141 while (algo.ValidKeySize (++n));
146 [ExpectedException (typeof (CryptographicException))]
147 public void InvalidCipherMode ()
149 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
150 algo.Mode = (CipherMode) 255;
154 [ExpectedException (typeof (CryptographicException))]
155 public void InvalidPaddingMode ()
157 SymmetricAlgorithm algo = SymmetricAlgorithm.Create ();
158 algo.Padding = (PaddingMode) 255;
163 [ExpectedException (typeof (CryptographicException))]
165 public void FeedbackZero ()
167 // thanks to Yakk for the sample
168 DES des = new DESCryptoServiceProvider();
169 des.FeedbackSize = 0;
170 des.Padding = PaddingMode.None;
171 des.Mode = CipherMode.ECB;
172 des.Key = new byte [8] { 8, 7, 6, 5, 4, 3, 2, 1 };
174 ICryptoTransform enc = des.CreateEncryptor ();
175 byte[] response = new byte [16];
176 byte[] challenge = new byte [16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
178 enc.TransformBlock (challenge, 0, challenge.Length, response, 0);
179 AssertEquals ("7A-64-CD-1B-4F-EE-B5-92-54-90-53-E9-83-71-A6-0C", BitConverter.ToString (response));