KeyExchangeDhGroupExchangeReplyBuilder.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using Renci.SshNet.Common;
  4. using Renci.SshNet.Messages.Transport;
  5. namespace Renci.SshNet.Tests.Classes.Messages.Transport
  6. {
  7. public class KeyExchangeDhGroupExchangeReplyBuilder
  8. {
  9. private byte[] _hostKeyAlgorithm;
  10. private byte[] _hostKeys;
  11. private BigInteger _f;
  12. private byte[] _signature;
  13. public KeyExchangeDhGroupExchangeReplyBuilder WithHostKey(string hostKeyAlgorithm, params BigInteger[] hostKeys)
  14. {
  15. _hostKeyAlgorithm = Encoding.UTF8.GetBytes(hostKeyAlgorithm);
  16. var sshDataStream = new SshDataStream(0);
  17. foreach (var hostKey in hostKeys)
  18. sshDataStream.Write(hostKey);
  19. _hostKeys = sshDataStream.ToArray();
  20. return this;
  21. }
  22. public KeyExchangeDhGroupExchangeReplyBuilder WithF(BigInteger f)
  23. {
  24. _f = f;
  25. return this;
  26. }
  27. public KeyExchangeDhGroupExchangeReplyBuilder WithSignature(byte[] signature)
  28. {
  29. _signature = signature;
  30. return this;
  31. }
  32. public byte[] Build()
  33. {
  34. var sshDataStream = new SshDataStream(0);
  35. sshDataStream.WriteByte(KeyExchangeDhGroupExchangeReply.MessageNumber);
  36. sshDataStream.Write((uint)(4 + _hostKeyAlgorithm.Length + _hostKeys.Length));
  37. sshDataStream.Write((uint) _hostKeyAlgorithm.Length);
  38. sshDataStream.Write(_hostKeyAlgorithm, 0, _hostKeyAlgorithm.Length);
  39. sshDataStream.Write(_hostKeys, 0, _hostKeys.Length);
  40. sshDataStream.Write(_f);
  41. sshDataStream.WriteBinary(_signature);
  42. return sshDataStream.ToArray();
  43. }
  44. }
  45. }