summary refs log tree commit diff
path: root/crypto/test
diff options
context:
space:
mode:
authorTim Whittington <bc@whittington.net.nz>2013-10-11 11:22:50 +1300
committerTim Whittington <bc@whittington.net.nz>2013-10-20 21:27:01 +1300
commitcfef781c3ba6b52b4298d322f588ae5209bc6244 (patch)
tree312df341014ac6cd096af8329d5a7a4d34006729 /crypto/test
parentfixed line endings (diff)
downloadBouncyCastle.NET-ed25519-cfef781c3ba6b52b4298d322f588ae5209bc6244.tar.xz
Port of Threefish implementation from bc-java.
All block sizes (256/5124/1024) and unit tests.
Diffstat (limited to 'crypto/test')
-rw-r--r--crypto/test/src/crypto/test/CipherTest.cs2
-rw-r--r--crypto/test/src/crypto/test/RegressionTest.cs3
-rw-r--r--crypto/test/src/crypto/test/Threefish1024Test.cs74
-rw-r--r--crypto/test/src/crypto/test/Threefish256Test.cs59
-rw-r--r--crypto/test/src/crypto/test/Threefish512Test.cs64
5 files changed, 201 insertions, 1 deletions
diff --git a/crypto/test/src/crypto/test/CipherTest.cs b/crypto/test/src/crypto/test/CipherTest.cs
index a893e0239..d9c085d44 100644
--- a/crypto/test/src/crypto/test/CipherTest.cs
+++ b/crypto/test/src/crypto/test/CipherTest.cs
@@ -42,7 +42,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 				//
 				// state tests
 				//
-				byte[] buf = new byte[16];
+				byte[] buf = new byte[_engine.GetBlockSize()];
 
 				try
 				{
diff --git a/crypto/test/src/crypto/test/RegressionTest.cs b/crypto/test/src/crypto/test/RegressionTest.cs
index 687e9ee4f..0f08d47f4 100644
--- a/crypto/test/src/crypto/test/RegressionTest.cs
+++ b/crypto/test/src/crypto/test/RegressionTest.cs
@@ -39,6 +39,9 @@ namespace Org.BouncyCastle.Crypto.Tests
             new SkipjackTest(),
             new BlowfishTest(),
             new TwofishTest(),
+            new Threefish256Test(),
+            new Threefish512Test(),
+            new Threefish1024Test(),
             new Cast5Test(),
             new Cast6Test(),
             new Gost28147Test(),
diff --git a/crypto/test/src/crypto/test/Threefish1024Test.cs b/crypto/test/src/crypto/test/Threefish1024Test.cs
new file mode 100644
index 000000000..64f9aa29f
--- /dev/null
+++ b/crypto/test/src/crypto/test/Threefish1024Test.cs
@@ -0,0 +1,74 @@
+using System;
+
+using NUnit.Framework;
+
+using Org.BouncyCastle.Crypto.Engines;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Utilities.Encoders;
+using Org.BouncyCastle.Utilities.Test;
+
+namespace Org.BouncyCastle.Crypto.Tests
+{
+
+	[TestFixture]
+	public class Threefish1024Test
+		: CipherTest
+	{
+		// Test cases from skein_golden_kat_internals.txt in Skein 1.3 NIST CD
+		static SimpleTest[] tests =
+		{
+			new BlockCipherVectorTest(0, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(new byte[128]),
+				new byte[16]),
+			                          "0000000000000000000000000000000000000000000000000000000000000000" +
+			                          "0000000000000000000000000000000000000000000000000000000000000000" +
+			                          "0000000000000000000000000000000000000000000000000000000000000000" +
+			                          "0000000000000000000000000000000000000000000000000000000000000000",
+			                          "f05c3d0a3d05b304f785ddc7d1e036015c8aa76e2f217b06c6e1544c0bc1a90d" +
+			                          "f0accb9473c24e0fd54fea68057f43329cb454761d6df5cf7b2e9b3614fbd5a2" +
+			                          "0b2e4760b40603540d82eabc5482c171c832afbe68406bc39500367a592943fa" +
+			                          "9a5b4a43286ca3c4cf46104b443143d560a4b230488311df4feef7e1dfe8391e"),
+			new BlockCipherVectorTest(1, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(Hex.Decode(
+				"101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f" +
+				"303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f" +
+				"505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f" +
+				"707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f")),
+				Hex.Decode("000102030405060708090a0b0c0d0e0f")),
+			                          "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0" +
+			                          "dfdedddcdbdad9d8d7d6d5d4d3d2d1d0cfcecdcccbcac9c8c7c6c5c4c3c2c1c0" +
+			                          "bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0afaeadacabaaa9a8a7a6a5a4a3a2a1a0" +
+			                          "9f9e9d9c9b9a999897969594939291908f8e8d8c8b8a89888786858483828180",
+			                          "a6654ddbd73cc3b05dd777105aa849bce49372eaaffc5568d254771bab85531c" +
+			                          "94f780e7ffaae430d5d8af8c70eebbe1760f3b42b737a89cb363490d670314bd" +
+			                          "8aa41ee63c2e1f45fbd477922f8360b388d6125ea6c7af0ad7056d01796e90c8" +
+			                          "3313f4150a5716b30ed5f569288ae974ce2b4347926fce57de44512177dd7cde")
+		};
+
+		public Threefish1024Test()
+			: base(tests, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024), new KeyParameter(new byte[128]))
+		{
+		}
+
+		public override string Name
+		{
+			get { return "Threefish-1024"; }
+		}
+
+		public static void Main(
+			string[] args)
+		{
+			RunTest(new Threefish1024Test());
+		}
+
+		[Test]
+		public void TestFunction()
+		{
+			string resultText = Perform().ToString();
+
+			Assert.AreEqual(Name + ": Okay", resultText);
+		}
+	}
+}
diff --git a/crypto/test/src/crypto/test/Threefish256Test.cs b/crypto/test/src/crypto/test/Threefish256Test.cs
new file mode 100644
index 000000000..e44299a31
--- /dev/null
+++ b/crypto/test/src/crypto/test/Threefish256Test.cs
@@ -0,0 +1,59 @@
+using System;
+
+using NUnit.Framework;
+
+using Org.BouncyCastle.Crypto.Engines;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Utilities.Encoders;
+using Org.BouncyCastle.Utilities.Test;
+
+namespace Org.BouncyCastle.Crypto.Tests
+{
+
+	[TestFixture]
+	public class Threefish256Test
+		: CipherTest
+	{
+		// Test cases from skein_golden_kat_internals.txt in Skein 1.3 NIST CD
+		static SimpleTest[] tests =
+		{
+			new BlockCipherVectorTest(0, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(new byte[32]),
+				new byte[16]),
+			                          "0000000000000000000000000000000000000000000000000000000000000000",
+			                          "84da2a1f8beaee947066ae3e3103f1ad536db1f4a1192495116b9f3ce6133fd8"),
+			new BlockCipherVectorTest(1, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(Hex.Decode(
+				"101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f")),
+				Hex.Decode("000102030405060708090a0b0c0d0e0f")),
+			                          "FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0",
+			                          "e0d091ff0eea8fdfc98192e62ed80ad59d865d08588df476657056b5955e97df")
+		};
+
+		public Threefish256Test()
+			: base(tests, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256), new KeyParameter(new byte[32]))
+		{
+		}
+
+		public override string Name
+		{
+			get { return "Threefish-256"; }
+		}
+
+		public static void Main(
+			string[] args)
+		{
+			RunTest(new Threefish256Test());
+		}
+
+		[Test]
+		public void TestFunction()
+		{
+			string resultText = Perform().ToString();
+
+			Assert.AreEqual(Name + ": Okay", resultText);
+		}
+	}
+}
\ No newline at end of file
diff --git a/crypto/test/src/crypto/test/Threefish512Test.cs b/crypto/test/src/crypto/test/Threefish512Test.cs
new file mode 100644
index 000000000..8f4ec6345
--- /dev/null
+++ b/crypto/test/src/crypto/test/Threefish512Test.cs
@@ -0,0 +1,64 @@
+using System;
+
+using NUnit.Framework;
+
+using Org.BouncyCastle.Crypto.Engines;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Utilities.Encoders;
+using Org.BouncyCastle.Utilities.Test;
+
+namespace Org.BouncyCastle.Crypto.Tests
+{
+
+	[TestFixture]
+	public class Threefish512Test
+		: CipherTest
+	{
+		// Test cases from skein_golden_kat_internals.txt in Skein 1.3 NIST CD
+		static SimpleTest[] tests =
+		{
+			new BlockCipherVectorTest(0, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(new byte[64]),
+				new byte[16]),
+			                          "0000000000000000000000000000000000000000000000000000000000000000" +
+			                          "0000000000000000000000000000000000000000000000000000000000000000",
+			                          "b1a2bbc6ef6025bc40eb3822161f36e375d1bb0aee3186fbd19e47c5d479947b" +
+			                          "7bc2f8586e35f0cff7e7f03084b0b7b1f1ab3961a580a3e97eb41ea14a6d7bbe"),
+			new BlockCipherVectorTest(1, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512),
+			                          new TweakableBlockCipherParameters(
+				new KeyParameter(Hex.Decode(
+				"101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f" +
+				"303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f")),
+				Hex.Decode("000102030405060708090a0b0c0d0e0f")),
+			                          "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0" +
+			                          "dfdedddcdbdad9d8d7d6d5d4d3d2d1d0cfcecdcccbcac9c8c7c6c5c4c3c2c1c0",
+			                          "e304439626d45a2cb401cad8d636249a6338330eb06d45dd8b36b90e97254779" +
+			                          "272a0a8d99463504784420ea18c9a725af11dffea10162348927673d5c1caf3d")
+		};
+
+		public Threefish512Test()
+			: base(tests, new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512), new KeyParameter(new byte[64]))
+		{
+		}
+
+		public override string Name
+		{
+			get { return "Threefish-512"; }
+		}
+
+		public static void Main(
+			string[] args)
+		{
+			RunTest(new Threefish512Test());
+		}
+
+		[Test]
+		public void TestFunction()
+		{
+			string resultText = Perform().ToString();
+
+			Assert.AreEqual(Name + ": Okay", resultText);
+		}
+	}
+}
\ No newline at end of file