<PackageReference Include="SSH.NET" Version="2024.1.0" />

SshKeyData

public sealed class SshKeyData : SshData
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); } } } }