using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Renci.SshNet.Common;
using Renci.SshNet.Security.Cryptography.Ciphers;
using Renci.SshNet.Tests.Common;
using Renci.SshNet.Tests.Properties;
namespace Renci.SshNet.Tests.Classes.Security.Cryptography.Ciphers
{
///
/// Implements ARCH4 cipher algorithm
///
[TestClass]
public class Arc4CipherTest : TestBase
{
///
///A test for Arc4Cipher Constructor
///
[TestMethod]
[Ignore] // placeholder for actual test
public void Arc4CipherConstructorTest()
{
byte[] key = null; // TODO: Initialize to an appropriate value
Arc4Cipher target = new Arc4Cipher(key, true);
Assert.Inconclusive("TODO: Implement code to verify target");
}
[TestMethod]
public void Decrypt_DischargeFirstBytes_False1()
{
const string key = "Key";
const string expectedPlainText = "Plaintext";
var encoding = Encoding.ASCII;
var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
var cipherText = new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 };
var actualPlainText = cipher.Decrypt(cipherText);
Assert.AreEqual(expectedPlainText, encoding.GetString(actualPlainText));
}
[TestMethod]
public void Decrypt_DischargeFirstBytes_False2()
{
const string key = "Wiki";
const string expectedPlainText = "pedia";
var encoding = Encoding.ASCII;
var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
var cipherText = new byte[] { 0x10, 0X21, 0xBF, 0x04, 0x20 };
var actualPlainText = cipher.Decrypt(cipherText);
Assert.AreEqual(expectedPlainText, encoding.GetString(actualPlainText));
}
///
///A test for DecryptBlock
///
[TestMethod]
[Ignore] // placeholder for actual test
public void DecryptBlockTest()
{
byte[] key = null; // TODO: Initialize to an appropriate value
Arc4Cipher target = new Arc4Cipher(key, true); // TODO: Initialize to an appropriate value
byte[] inputBuffer = null; // TODO: Initialize to an appropriate value
int inputOffset = 0; // TODO: Initialize to an appropriate value
int inputCount = 0; // TODO: Initialize to an appropriate value
byte[] outputBuffer = null; // TODO: Initialize to an appropriate value
int outputOffset = 0; // TODO: Initialize to an appropriate value
int expected = 0; // TODO: Initialize to an appropriate value
int actual;
actual = target.DecryptBlock(inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
[TestMethod]
public void Encrypt_DischargeFirstBytes_False1()
{
const string key = "Key";
const string plainText = "Plaintext";
var encoding = Encoding.ASCII;
var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
var expectedCipherText = new byte[] { 0xBB, 0xF3, 0x16, 0xE8, 0xD9, 0x40, 0xAF, 0x0A, 0xD3 };
var actualCipherText = cipher.Encrypt(encoding.GetBytes(plainText));
Assert.IsNotNull(actualCipherText);
Assert.AreEqual(expectedCipherText.Length, actualCipherText.Length);
Assert.AreEqual(expectedCipherText[0], actualCipherText[0]);
Assert.AreEqual(expectedCipherText[1], actualCipherText[1]);
Assert.AreEqual(expectedCipherText[2], actualCipherText[2]);
Assert.AreEqual(expectedCipherText[3], actualCipherText[3]);
Assert.AreEqual(expectedCipherText[4], actualCipherText[4]);
Assert.AreEqual(expectedCipherText[5], actualCipherText[5]);
Assert.AreEqual(expectedCipherText[6], actualCipherText[6]);
Assert.AreEqual(expectedCipherText[7], actualCipherText[7]);
Assert.AreEqual(expectedCipherText[8], actualCipherText[8]);
}
[TestMethod]
public void Encrypt_DischargeFirstBytes_False2()
{
const string key = "Wiki";
const string plainText = "pedia";
var encoding = Encoding.ASCII;
var cipher = new Arc4Cipher(encoding.GetBytes(key), false);
var expectedCipherText = new byte[] { 0x10, 0X21, 0xBF, 0x04, 0x20 };
var actualCipherText = cipher.Encrypt(encoding.GetBytes(plainText));
Assert.IsNotNull(actualCipherText);
Assert.AreEqual(expectedCipherText.Length, actualCipherText.Length);
Assert.AreEqual(expectedCipherText[0], actualCipherText[0]);
Assert.AreEqual(expectedCipherText[1], actualCipherText[1]);
Assert.AreEqual(expectedCipherText[2], actualCipherText[2]);
Assert.AreEqual(expectedCipherText[3], actualCipherText[3]);
Assert.AreEqual(expectedCipherText[4], actualCipherText[4]);
}
///
///A test for EncryptBlock
///
[TestMethod]
[Ignore] // placeholder for actual test
public void EncryptBlockTest()
{
byte[] key = null; // TODO: Initialize to an appropriate value
Arc4Cipher target = new Arc4Cipher(key, true); // TODO: Initialize to an appropriate value
byte[] inputBuffer = null; // TODO: Initialize to an appropriate value
int inputOffset = 0; // TODO: Initialize to an appropriate value
int inputCount = 0; // TODO: Initialize to an appropriate value
byte[] outputBuffer = null; // TODO: Initialize to an appropriate value
int outputOffset = 0; // TODO: Initialize to an appropriate value
int expected = 0; // TODO: Initialize to an appropriate value
int actual;
actual = target.EncryptBlock(inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
[TestMethod]
[Owner("olegkap")]
[TestCategory("Cipher")]
[TestCategory("integration")]
public void Test_Cipher_Arcfour128_Connection()
{
var connectionInfo = new PasswordConnectionInfo(Resources.HOST, int.Parse(Resources.PORT), Resources.USERNAME, Resources.PASSWORD);
connectionInfo.Encryptions.Clear();
connectionInfo.Encryptions.Add("arcfour128", new CipherInfo(128, (key, iv) => { return new Arc4Cipher(key, true); }));
using (var client = new SshClient(connectionInfo))
{
client.Connect();
client.Disconnect();
}
}
[TestMethod]
[Owner("olegkap")]
[TestCategory("Cipher")]
[TestCategory("integration")]
public void Test_Cipher_Arcfour256_Connection()
{
var connectionInfo = new PasswordConnectionInfo(Resources.HOST, int.Parse(Resources.PORT), Resources.USERNAME, Resources.PASSWORD);
connectionInfo.Encryptions.Clear();
connectionInfo.Encryptions.Add("arcfour256", new CipherInfo(256, (key, iv) => { return new Arc4Cipher(key, true); }));
using (var client = new SshClient(connectionInfo))
{
client.Connect();
client.Disconnect();
}
}
}
}