Arc4CipherTest.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.Text;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Renci.SshNet.Common;
  4. using Renci.SshNet.Security.Cryptography.Ciphers;
  5. using Renci.SshNet.Tests.Common;
  6. using Renci.SshNet.Tests.Properties;
  7. namespace Renci.SshNet.Tests.Classes.Security.Cryptography.Ciphers
  8. {
  9. /// <summary>
  10. /// Implements ARCH4 cipher algorithm
  11. /// </summary>
  12. [TestClass]
  13. public class Arc4CipherTest : TestBase
  14. {
  15. /// <summary>
  16. ///A test for Arc4Cipher Constructor
  17. ///</summary>
  18. [TestMethod()]
  19. public void Arc4CipherConstructorTest()
  20. {
  21. byte[] key = null; // TODO: Initialize to an appropriate value
  22. Arc4Cipher target = new Arc4Cipher(key, true);
  23. Assert.Inconclusive("TODO: Implement code to verify target");
  24. }
  25. [TestMethod]
  26. public void Decrypt_DischargeFirstBytes_False1()
  27. {
  28. const string key = "Key";
  29. const string expectedPlainText = "Plaintext";
  30. var encoding = Encoding.ASCII;
  31. var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
  32. var cipherText = new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 };
  33. var actualPlainText = cipher.Decrypt(cipherText);
  34. Assert.AreEqual(expectedPlainText, encoding.GetString(actualPlainText));
  35. }
  36. [TestMethod]
  37. public void Decrypt_DischargeFirstBytes_False2()
  38. {
  39. const string key = "Wiki";
  40. const string expectedPlainText = "pedia";
  41. var encoding = Encoding.ASCII;
  42. var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
  43. var cipherText = new byte[] { 0x10, 0X21, 0xBF, 0x04, 0x20 };
  44. var actualPlainText = cipher.Decrypt(cipherText);
  45. Assert.AreEqual(expectedPlainText, encoding.GetString(actualPlainText));
  46. }
  47. /// <summary>
  48. ///A test for DecryptBlock
  49. ///</summary>
  50. [TestMethod()]
  51. public void DecryptBlockTest()
  52. {
  53. byte[] key = null; // TODO: Initialize to an appropriate value
  54. Arc4Cipher target = new Arc4Cipher(key, true); // TODO: Initialize to an appropriate value
  55. byte[] inputBuffer = null; // TODO: Initialize to an appropriate value
  56. int inputOffset = 0; // TODO: Initialize to an appropriate value
  57. int inputCount = 0; // TODO: Initialize to an appropriate value
  58. byte[] outputBuffer = null; // TODO: Initialize to an appropriate value
  59. int outputOffset = 0; // TODO: Initialize to an appropriate value
  60. int expected = 0; // TODO: Initialize to an appropriate value
  61. int actual;
  62. actual = target.DecryptBlock(inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);
  63. Assert.AreEqual(expected, actual);
  64. Assert.Inconclusive("Verify the correctness of this test method.");
  65. }
  66. [TestMethod]
  67. public void Encrypt_DischargeFirstBytes_False1()
  68. {
  69. const string key = "Key";
  70. const string plainText = "Plaintext";
  71. var encoding = Encoding.ASCII;
  72. var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
  73. var expectedCipherText = new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 };
  74. var actualCipherText = cipher.Encrypt(encoding.GetBytes(plainText));
  75. Assert.IsNotNull(actualCipherText);
  76. Assert.AreEqual(expectedCipherText.Length, actualCipherText.Length);
  77. Assert.AreEqual(expectedCipherText[0], actualCipherText[0]);
  78. Assert.AreEqual(expectedCipherText[1], actualCipherText[1]);
  79. Assert.AreEqual(expectedCipherText[2], actualCipherText[2]);
  80. Assert.AreEqual(expectedCipherText[3], actualCipherText[3]);
  81. Assert.AreEqual(expectedCipherText[4], actualCipherText[4]);
  82. Assert.AreEqual(expectedCipherText[5], actualCipherText[5]);
  83. Assert.AreEqual(expectedCipherText[6], actualCipherText[6]);
  84. Assert.AreEqual(expectedCipherText[7], actualCipherText[7]);
  85. Assert.AreEqual(expectedCipherText[8], actualCipherText[8]);
  86. }
  87. [TestMethod]
  88. public void Encrypt_DischargeFirstBytes_False2()
  89. {
  90. const string key = "Wiki";
  91. const string plainText = "pedia";
  92. var encoding = Encoding.ASCII;
  93. var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
  94. var expectedCipherText = new byte[] { 0x10, 0X21, 0xBF, 0x04, 0x20 };
  95. var actualCipherText = cipher.Encrypt(encoding.GetBytes(plainText));
  96. Assert.IsNotNull(actualCipherText);
  97. Assert.AreEqual(expectedCipherText.Length, actualCipherText.Length);
  98. Assert.AreEqual(expectedCipherText[0], actualCipherText[0]);
  99. Assert.AreEqual(expectedCipherText[1], actualCipherText[1]);
  100. Assert.AreEqual(expectedCipherText[2], actualCipherText[2]);
  101. Assert.AreEqual(expectedCipherText[3], actualCipherText[3]);
  102. Assert.AreEqual(expectedCipherText[4], actualCipherText[4]);
  103. }
  104. /// <summary>
  105. ///A test for EncryptBlock
  106. ///</summary>
  107. [TestMethod()]
  108. public void EncryptBlockTest()
  109. {
  110. byte[] key = null; // TODO: Initialize to an appropriate value
  111. Arc4Cipher target = new Arc4Cipher(key, true); // TODO: Initialize to an appropriate value
  112. byte[] inputBuffer = null; // TODO: Initialize to an appropriate value
  113. int inputOffset = 0; // TODO: Initialize to an appropriate value
  114. int inputCount = 0; // TODO: Initialize to an appropriate value
  115. byte[] outputBuffer = null; // TODO: Initialize to an appropriate value
  116. int outputOffset = 0; // TODO: Initialize to an appropriate value
  117. int expected = 0; // TODO: Initialize to an appropriate value
  118. int actual;
  119. actual = target.EncryptBlock(inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);
  120. Assert.AreEqual(expected, actual);
  121. Assert.Inconclusive("Verify the correctness of this test method.");
  122. }
  123. [TestMethod]
  124. [Owner("olegkap")]
  125. [TestCategory("Cipher")]
  126. public void Test_Cipher_Arcfour128_Connection()
  127. {
  128. var connectionInfo = new PasswordConnectionInfo(Resources.HOST, int.Parse(Resources.PORT), Resources.USERNAME, Resources.PASSWORD);
  129. connectionInfo.Encryptions.Clear();
  130. connectionInfo.Encryptions.Add("arcfour128", new CipherInfo(128, (key, iv) => { return new Arc4Cipher(key, true); }));
  131. using (var client = new SshClient(connectionInfo))
  132. {
  133. client.Connect();
  134. client.Disconnect();
  135. }
  136. }
  137. [TestMethod]
  138. [Owner("olegkap")]
  139. [TestCategory("Cipher")]
  140. public void Test_Cipher_Arcfour256_Connection()
  141. {
  142. var connectionInfo = new PasswordConnectionInfo(Resources.HOST, int.Parse(Resources.PORT), Resources.USERNAME, Resources.PASSWORD);
  143. connectionInfo.Encryptions.Clear();
  144. connectionInfo.Encryptions.Add("arcfour256", new CipherInfo(256, (key, iv) => { return new Arc4Cipher(key, true); }));
  145. using (var client = new SshClient(connectionInfo))
  146. {
  147. client.Connect();
  148. client.Disconnect();
  149. }
  150. }
  151. }
  152. }