public static String Format(this PublicKey publicKey) { StringBuilder sb = new StringBuilder(); String keyParamsString = ""; switch (publicKey.Oid.Value) { case AlgorithmOids.ECC: keyParamsString = AsnFormatter .BinaryToString(publicKey.EncodedParameters.RawData, EncodingType.HexAddress) .TrimEnd(); keyParamsString += $"\r\n {new Asn1ObjectIdentifier(publicKey.EncodedParameters.RawData).Value.Format(true)}"; break; case AlgorithmOids.RSA: keyParamsString = AsnFormatter.BinaryToString(Asn1Utils.EncodeNull(), EncodingType.Hex); break; default: keyParamsString = AsnFormatter .BinaryToString(publicKey.EncodedParameters.RawData, EncodingType.HexAddress) .Replace("\r\n", "\r\n ") .TrimEnd(); break; } String keyValueString = AsnFormatter .BinaryToString(publicKey.EncodedKeyValue.RawData, EncodingType.HexAddress) .Replace("\r\n", "\r\n ") .TrimEnd(); sb.Append( $@"Public Key Algorithm: Algorithm ObjectId: {publicKey.Oid.FriendlyName} ({publicKey.Oid.Value}) Algorithm Parameters: {keyParamsString} Public Key Length: {publicKey.GetKeyLength()} bits Public Key: UnusedBits = 0 {keyValueString} "); return(sb.ToString()); }