KeyExchangeDhGroupExchangeReplyBuilder.cs 1.8 KB

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