<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" />

PemWriter

public class PemWriter : IDisposable
using Org.BouncyCastle.Utilities.Encoders; using System; using System.IO; namespace Org.BouncyCastle.Utilities.IO.Pem { public class PemWriter : IDisposable { private const int LineLength = 64; private readonly TextWriter m_writer; private readonly int m_nlLength; private readonly char[] m_buf = new char[64]; public TextWriter Writer => m_writer; public PemWriter(TextWriter writer) { if (writer == null) throw new ArgumentNullException("writer"); m_writer = writer; m_nlLength = Environment.NewLine.Length; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) m_writer.Dispose(); } public int GetOutputSize(PemObject obj) { int num = 2 * (obj.Type.Length + 10 + m_nlLength) + 6 + 4; if (obj.Headers.Count > 0) { foreach (PemHeader header in obj.Headers) { num += header.Name.Length + ": ".Length + header.Value.Length + m_nlLength; } num += m_nlLength; } int num2 = (obj.Content.Length + 2) / 3 * 4; return num + (num2 + (num2 + 64 - 1) / 64 * m_nlLength); } public void WriteObject(PemObjectGenerator objGen) { PemObject pemObject = objGen.Generate(); WritePreEncapsulationBoundary(pemObject.Type); if (pemObject.Headers.Count > 0) { foreach (PemHeader header in pemObject.Headers) { m_writer.Write(header.Name); m_writer.Write(": "); m_writer.WriteLine(header.Value); } m_writer.WriteLine(); } WriteEncoded(pemObject.Content); WritePostEncapsulationBoundary(pemObject.Type); } private void WriteEncoded(byte[] bytes) { bytes = Base64.Encode(bytes); for (int i = 0; i < bytes.Length; i += m_buf.Length) { int j; for (j = 0; j != m_buf.Length && i + j < bytes.Length; j++) { m_buf[j] = (char)bytes[i + j]; } m_writer.WriteLine(m_buf, 0, j); } } private void WritePreEncapsulationBoundary(string type) { m_writer.WriteLine("-----BEGIN " + type + "-----"); } private void WritePostEncapsulationBoundary(string type) { m_writer.WriteLine("-----END " + type + "-----"); } } }