SshKeyData
Facilitates (de)serializing encoded public key data in the format
specified by RFC 4253 section 6.6.
using Renci.SshNet.Common;
using Renci.SshNet.Security.Chaos.NaCl;
using System.Collections.Generic;
using System.Text;
namespace Renci.SshNet.Security
{
public sealed class SshKeyData : SshData
{
public string Name { get; set; }
public BigInteger[] Keys { get; set; }
protected override int BufferCapacity {
get {
int bufferCapacity = base.BufferCapacity;
bufferCapacity += 4;
bufferCapacity += Encoding.UTF8.GetByteCount(Name);
BigInteger[] keys = Keys;
for (int i = 0; i < keys.Length; i++) {
BigInteger bigInteger = keys[i];
bufferCapacity += 4;
bufferCapacity += bigInteger.BitLength / 8;
}
return bufferCapacity;
}
}
public SshKeyData(byte[] data)
{
Load(data);
}
public SshKeyData(string name, BigInteger[] keys)
{
Name = name;
Keys = keys;
}
protected override void LoadData()
{
Name = ReadString(null);
List<BigInteger> list = new List<BigInteger>();
while (!base.IsEndOfData) {
list.Add(ReadBinary().ToBigInteger2());
}
Keys = list.ToArray();
}
protected override void SaveData()
{
Write(Name);
BigInteger[] keys = Keys;
for (int i = 0; i < keys.Length; i++) {
BigInteger bigInteger = keys[i];
byte[] array = bigInteger.ToByteArray().Reverse();
if (Name == "ssh-ed25519")
array = array.TrimLeadingZeros().Pad(Ed25519.PublicKeySizeInBytes);
WriteBinaryString(array);
}
}
}
}