summary refs log tree commit diff
path: root/crypto/test/src/security/test/TestDigestUtil.cs
blob: 0f169f931460982567ac0ed21562b90108c9e710 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;

using NUnit.Framework;

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Digests;

namespace Org.BouncyCastle.Security.Tests
{
    [TestFixture]
    public class TestDigestUtilities
    {
		private static readonly byte[] TestBytes = new byte[100];

		static TestDigestUtilities()
		{
			new SecureRandom().NextBytes(TestBytes);
		}

		[Test]
        public void TestAlgorithms()
        {
			CheckAlgorithm("GOST3411", new Gost3411Digest());
			CheckAlgorithm("MD2", new MD2Digest());
            CheckAlgorithm("MD4", new MD4Digest());
            CheckAlgorithm("MD5", new MD5Digest());
			CheckAlgorithm("RipeMD128", new RipeMD128Digest());
			CheckAlgorithm("RipeMD160", new RipeMD160Digest());
			CheckAlgorithm("RipeMD256", new RipeMD256Digest());
			CheckAlgorithm("RipeMD320", new RipeMD320Digest());
			CheckAlgorithm("SHA-1", new Sha1Digest());
            CheckAlgorithm("SHA-224", new Sha224Digest());
            CheckAlgorithm("SHA-256", new Sha256Digest());
            CheckAlgorithm("SHA-384", new Sha384Digest());
            CheckAlgorithm("SHA-512", new Sha512Digest());
			CheckAlgorithm("Tiger", new TigerDigest());
			CheckAlgorithm("Whirlpool", new WhirlpoolDigest());
		}

		private void CheckAlgorithm(
            string	name,
            IDigest	digest)
        {
            byte[] hash1 = MakeTestHash(digest);
			byte[] hash2 = MakeTestHash(DigestUtilities.GetDigest(name));

			Assert.AreEqual(hash1, hash2, name);
        }

		private byte[] MakeTestHash(
			IDigest digest)
		{
			for (int i = 0; i < digest.GetDigestSize(); ++i)
			{
				digest.Update((byte) i);
			}

			digest.BlockUpdate(TestBytes, 0, TestBytes.Length);

			return DigestUtilities.DoFinal(digest);
		}
    }
}