public void To(AgentWriter writer) { using var keyStream = new MemoryStream(); using var keyWriter = new AgentWriter(keyStream); var key = ((KeyHostAlgorithm)_keyFile.HostKey).Key; keyWriter.EncodeString(key.ToString()); switch (key.ToString()) { case "ssh-ed25519": var ed25519 = (ED25519Key)key; keyWriter.EncodeBignum2(ed25519.PublicKey); keyWriter.EncodeBignum2(ed25519.PrivateKey); break; case "ssh-rsa": var rsa = (RsaKey)key; keyWriter.EncodeBignum2(rsa.Modulus.ToByteArray().Reverse()); keyWriter.EncodeBignum2(rsa.Exponent.ToByteArray().Reverse()); keyWriter.EncodeBignum2(rsa.D.ToByteArray().Reverse()); keyWriter.EncodeBignum2(rsa.InverseQ.ToByteArray().Reverse()); keyWriter.EncodeBignum2(rsa.P.ToByteArray().Reverse()); keyWriter.EncodeBignum2(rsa.Q.ToByteArray().Reverse()); break; case "ecdsa-sha2-nistp256": // Fallthrough case "ecdsa-sha2-nistp384": // Fallthrough case "ecdsa-sha2-nistp521": var ecdsa = (EcdsaKey)key; var publicKey = ecdsa.Public; keyWriter.EncodeString(publicKey[0].ToByteArray().Reverse()); keyWriter.EncodeString(publicKey[1].ToByteArray().Reverse()); keyWriter.EncodeBignum2(ecdsa.PrivateKey.ToBigInteger2().ToByteArray().Reverse()); break; } // comment keyWriter.EncodeString(key.Comment ?? ""); var keyData = keyStream.ToArray(); writer.Write((uint)(1 + keyData.Length)); writer.Write((byte)AgentMessageType.SSH2_AGENTC_ADD_IDENTITY); writer.Write(keyData); }