| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | using Renci.SshNet.Common;using Renci.SshNet.IntegrationTests.Common;using Renci.SshNet.Security;using Renci.SshNet.TestTools.OpenSSH;namespace Renci.SshNet.IntegrationTests{    [TestClass]    public class HostKeyAlgorithmTests : IntegrationTestBase    {        private IConnectionInfoFactory _connectionInfoFactory;        private RemoteSshdConfig _remoteSshdConfig;        [TestInitialize]        public void SetUp()        {            _connectionInfoFactory = new LinuxVMConnectionFactory(SshServerHostName, SshServerPort);            _remoteSshdConfig = new RemoteSshd(new LinuxAdminConnectionFactory(SshServerHostName, SshServerPort)).OpenConfig();        }        [TestCleanup]        public void TearDown()        {            _remoteSshdConfig?.Reset();        }        [TestMethod]        public void SshDss()        {            DoTest(HostKeyAlgorithm.SshDss, HostKeyFile.Dsa);        }        [TestMethod]        public void SshRsa()        {            DoTest(HostKeyAlgorithm.SshRsa, HostKeyFile.Rsa);        }        [TestMethod]        public void SshRsaSha256()        {            DoTest(HostKeyAlgorithm.RsaSha2256, HostKeyFile.Rsa);        }        [TestMethod]        public void SshRsaSha512()        {            DoTest(HostKeyAlgorithm.RsaSha2512, HostKeyFile.Rsa);        }        [TestMethod]        public void SshEd25519()        {            DoTest(HostKeyAlgorithm.SshEd25519, HostKeyFile.Ed25519);        }        [TestMethod]        public void Ecdsa256()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp256, HostKeyFile.Ecdsa256);        }        [TestMethod]        public void Ecdsa384()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp384, HostKeyFile.Ecdsa384);        }        [TestMethod]        public void Ecdsa521()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp521, HostKeyFile.Ecdsa521);        }        [TestMethod]        public void SshRsaCertificate()        {            DoTest(HostKeyAlgorithm.SshRsaCertV01OpenSSH, HostCertificateFile.RsaCertRsa);        }        [TestMethod]        public void SshRsaSha256Certificate()        {            DoTest(HostKeyAlgorithm.RsaSha2256CertV01OpenSSH, HostCertificateFile.RsaCertRsa);        }        [TestMethod]        public void Ecdsa256Certificate()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp256CertV01OpenSSH, HostCertificateFile.Ecdsa256CertRsa);        }        [TestMethod]        public void Ecdsa384Certificate()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp384CertV01OpenSSH, HostCertificateFile.Ecdsa384CertEcdsa);        }        [TestMethod]        public void Ecdsa521Certificate()        {            DoTest(HostKeyAlgorithm.EcdsaSha2Nistp521CertV01OpenSSH, HostCertificateFile.Ecdsa521CertEd25519);        }        [TestMethod]        public void Ed25519Certificate()        {            DoTest(HostKeyAlgorithm.SshEd25519CertV01OpenSSH, HostCertificateFile.Ed25519CertEcdsa);        }        private void DoTest(HostKeyAlgorithm hostKeyAlgorithm, HostKeyFile hostKeyFile, HostCertificateFile hostCertificateFile = null)        {            _remoteSshdConfig.ClearHostKeyAlgorithms()                             .AddHostKeyAlgorithm(hostKeyAlgorithm)                             .ClearHostKeyFiles()                             .AddHostKeyFile(hostKeyFile.FilePath)                             .WithHostKeyCertificate(hostCertificateFile?.FilePath)                             .Update()                             .Restart();            HostKeyEventArgs hostKeyEventsArgs = null;            using (var client = new SshClient(_connectionInfoFactory.Create()))            {                client.HostKeyReceived += (sender, e) => hostKeyEventsArgs = e;                client.Connect();                client.Disconnect();            }            Assert.IsNotNull(hostKeyEventsArgs);            Assert.AreEqual(hostKeyAlgorithm.Name, hostKeyEventsArgs.HostKeyName);            Assert.AreEqual(hostKeyFile.KeyLength, hostKeyEventsArgs.KeyLength);            CollectionAssert.AreEqual(hostKeyFile.FingerPrint, hostKeyEventsArgs.FingerPrint);            if (hostCertificateFile is not null)            {                Assert.IsNotNull(hostKeyEventsArgs.Certificate);                Assert.AreEqual(Certificate.CertificateType.Host, hostKeyEventsArgs.Certificate.Type);                Assert.AreEqual(hostCertificateFile.CAFingerPrint, hostKeyEventsArgs.Certificate.CertificateAuthorityKeyFingerPrint);            }            else            {                Assert.IsNull(hostKeyEventsArgs.Certificate);            }        }        private void DoTest(HostKeyAlgorithm hostKeyAlgorithm, HostCertificateFile hostCertificateFile)        {            DoTest(hostKeyAlgorithm, hostCertificateFile.HostKeyFile, hostCertificateFile);        }    }}
 |