2 // PKCS1MaskGenerationMethodTest.cs - NUnit Test Cases for PKCS1MaskGenerationMethod
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
10 using NUnit.Framework;
12 using System.Security.Cryptography;
14 namespace MonoTests.System.Security.Cryptography {
17 // a. PKCS#1: RSA Cryptography Standard
18 // http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1/index.html
21 public class PKCS1MaskGenerationMethodTest {
23 protected PKCS1MaskGenerationMethod pkcs1;
28 pkcs1 = new PKCS1MaskGenerationMethod ();
31 public void AssertEquals (string msg, byte[] array1, byte[] array2)
33 AllTests.AssertEquals (msg, array1, array2);
37 public void Properties ()
40 Assertion.AssertEquals ("PKCS1MaskGenerationMethod HashName(default)", "SHA1", pkcs1.HashName);
42 pkcs1.HashName = null;
43 Assertion.AssertEquals ("PKCS1MaskGenerationMethod HashName(null)", "SHA1", pkcs1.HashName);
45 pkcs1.HashName = "SHA2";
46 Assertion.AssertEquals ("PKCS1MaskGenerationMethod HashName(bad)", "SHA2", pkcs1.HashName);
48 Assertion.AssertEquals ("PKCS1MaskGenerationMethod ToString()", "System.Security.Cryptography.PKCS1MaskGenerationMethod", pkcs1.ToString ());
52 public void EmptyMask ()
54 // pretty much useless but supported
55 byte[] random = { 0x01 };
56 byte[] mask = pkcs1.GenerateMask (random, 0);
57 Assertion.AssertEquals ("PKCS1MaskGenerationMethod Empty Mask", 0, mask.Length);
61 [ExpectedException (typeof (NullReferenceException))]
62 public void NullSeed ()
64 byte[] mask = pkcs1.GenerateMask (null, 10);
68 [ExpectedException (typeof (OverflowException))]
69 public void NegativeReturnRequest ()
71 byte[] random = { 0x01 };
72 byte[] mask = pkcs1.GenerateMask (random, -1);
75 // This test will FAIL with MS framework 1.0 and 1.1 as their MGF1 implementation is buggy
76 // see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip for RSA tests vector
78 public void PKCS1v21TestVector ()
80 pkcs1.HashName = "SHA1";
82 // seed = random string of octets (well not random in the tests ;-)
83 byte[] seed = { 0xaa, 0xfd, 0x12, 0xf6, 0x59, 0xca, 0xe6, 0x34, 0x89, 0xb4, 0x79, 0xe5, 0x07, 0x6d, 0xde, 0xc2, 0xf0, 0x6c, 0xb5, 0x8f };
86 // dbMask = MGF(seed, length(DB))
87 byte[] dbMask = pkcs1.GenerateMask (seed, LengthDB);
88 byte[] expectedDBMask = { 0x06, 0xe1, 0xde, 0xb2, 0x36, 0x9a, 0xa5, 0xa5, 0xc7, 0x07, 0xd8, 0x2c, 0x8e, 0x4e, 0x93, 0x24,
89 0x8a, 0xc7, 0x83, 0xde, 0xe0, 0xb2, 0xc0, 0x46, 0x26, 0xf5, 0xaf, 0xf9, 0x3e, 0xdc, 0xfb, 0x25,
90 0xc9, 0xc2, 0xb3, 0xff, 0x8a, 0xe1, 0x0e, 0x83, 0x9a, 0x2d, 0xdb, 0x4c, 0xdc, 0xfe, 0x4f, 0xf4,
91 0x77, 0x28, 0xb4, 0xa1, 0xb7, 0xc1, 0x36, 0x2b, 0xaa, 0xd2, 0x9a, 0xb4, 0x8d, 0x28, 0x69, 0xd5,
92 0x02, 0x41, 0x21, 0x43, 0x58, 0x11, 0x59, 0x1b, 0xe3, 0x92, 0xf9, 0x82, 0xfb, 0x3e, 0x87, 0xd0,
93 0x95, 0xae, 0xb4, 0x04, 0x48, 0xdb, 0x97, 0x2f, 0x3a, 0xc1, 0x4e, 0xaf, 0xf4, 0x9c, 0x8c, 0x3b,
94 0x7c, 0xfc, 0x95, 0x1a, 0x51, 0xec, 0xd1, 0xdd, 0xe6, 0x12, 0x64 };
95 AssertEquals ("PKCS1v21TestVector 1", expectedDBMask, dbMask);
97 // maskedDB = DB xor dbMask
98 byte[] DB = { 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90,
99 0xaf, 0xd8, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd4, 0x36, 0xe9, 0x95, 0x69,
104 0xfd, 0x32, 0xa7, 0xc8, 0xa0, 0x5b, 0xbc, 0x90, 0xd3, 0x2c, 0x49 };
105 byte[] maskedDB = new byte [dbMask.Length];
106 for (int i = 0; i < dbMask.Length; i++)
107 maskedDB [i] = Convert.ToByte (DB [i] ^ dbMask [i]);
109 // seedMask = MGF(maskedDB, length(seed))
110 byte[] seedMask = pkcs1.GenerateMask (maskedDB, seed.Length);
111 byte[] expectedSeedMask = { 0x41, 0x87, 0x0b, 0x5a, 0xb0, 0x29, 0xe6, 0x57, 0xd9, 0x57, 0x50, 0xb5, 0x4c, 0x28, 0x3c, 0x08, 0x72, 0x5d, 0xbe, 0xa9 };
112 AssertEquals ("PKCS1v21TestVector 2", expectedSeedMask, seedMask);