< Summary

Information
Class: Renci.SshNet.Security.KeyExchangeDiffieHellmanGroupShaBase
Assembly: Renci.SshNet
File(s): \home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\KeyExchangeDiffieHellmanGroupShaBase.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 83
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
Start(...)100%1100%
Finish()100%1100%
CalculateHash()100%1100%
Session_KeyExchangeDhReplyMessageReceived(...)100%1100%

File(s)

\home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\KeyExchangeDiffieHellmanGroupShaBase.cs

#LineLine coverage
 1using Renci.SshNet.Common;
 2using Renci.SshNet.Messages.Transport;
 3
 4namespace Renci.SshNet.Security
 5{
 6    internal abstract class KeyExchangeDiffieHellmanGroupShaBase : KeyExchangeDiffieHellman
 7    {
 8        /// <summary>
 9        /// Gets the group prime.
 10        /// </summary>
 11        /// <value>
 12        /// The group prime.
 13        /// </value>
 14        public abstract BigInteger GroupPrime { get; }
 15
 16        /// <summary>
 17        /// Starts key exchange algorithm.
 18        /// </summary>
 19        /// <param name="session">The session.</param>
 20        /// <param name="message">Key exchange init message.</param>
 21        public override void Start(Session session, KeyExchangeInitMessage message)
 1222        {
 1223            base.Start(session, message);
 24
 1225            Session.RegisterMessage("SSH_MSG_KEXDH_REPLY");
 26
 1227            Session.KeyExchangeDhReplyMessageReceived += Session_KeyExchangeDhReplyMessageReceived;
 28
 1229            _prime = GroupPrime;
 1230            _group = new BigInteger(new byte[] { 2 });
 31
 1232            PopulateClientExchangeValue();
 33
 1234            SendMessage(new KeyExchangeDhInitMessage(_clientExchangeValue));
 1235        }
 36
 37        /// <summary>
 38        /// Finishes key exchange algorithm.
 39        /// </summary>
 40        public override void Finish()
 1241        {
 1242            base.Finish();
 43
 1244            Session.KeyExchangeDhReplyMessageReceived -= Session_KeyExchangeDhReplyMessageReceived;
 1245        }
 46
 47        /// <summary>
 48        /// Calculates key exchange hash value.
 49        /// </summary>
 50        /// <returns>
 51        /// Key exchange hash.
 52        /// </returns>
 53        protected override byte[] CalculateHash()
 2454        {
 2455            var keyExchangeHashData = new KeyExchangeHashData
 2456            {
 2457                ClientVersion = Session.ClientVersion,
 2458                ServerVersion = Session.ServerVersion,
 2459                ClientPayload = _clientPayload,
 2460                ServerPayload = _serverPayload,
 2461                HostKey = _hostKey,
 2462                ClientExchangeValue = _clientExchangeValue,
 2463                ServerExchangeValue = _serverExchangeValue,
 2464                SharedKey = SharedKey,
 2465            };
 66
 2467            return Hash(keyExchangeHashData.GetBytes());
 2468        }
 69
 70        private void Session_KeyExchangeDhReplyMessageReceived(object sender, MessageEventArgs<KeyExchangeDhReplyMessage
 1271        {
 1272            var message = e.Message;
 73
 74            // Unregister message once received
 1275            Session.UnRegisterMessage("SSH_MSG_KEXDH_REPLY");
 76
 1277            HandleServerDhReply(message.HostKey, message.F, message.Signature);
 78
 79            // When SSH_MSG_KEXDH_REPLY received key exchange is completed
 1280            Finish();
 1281        }
 82    }
 83}