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

RoleSyntax

public class RoleSyntax : Asn1Encodable
using System; using System.Text; namespace Org.BouncyCastle.Asn1.X509 { public class RoleSyntax : Asn1Encodable { private readonly GeneralNames m_roleAuthority; private readonly GeneralName m_roleName; public GeneralNames RoleAuthority => m_roleAuthority; public GeneralName RoleName => m_roleName; public static RoleSyntax GetInstance(object obj) { if (obj == null) return null; RoleSyntax roleSyntax = obj as RoleSyntax; if (roleSyntax != null) return roleSyntax; return new RoleSyntax(Asn1Sequence.GetInstance(obj)); } public static RoleSyntax GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new RoleSyntax(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static RoleSyntax GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new RoleSyntax(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private RoleSyntax(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 1 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_roleAuthority = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, GeneralNames.GetTagged); m_roleName = Asn1Utilities.ReadContextTagged(seq, ref sequencePosition, 1, true, GeneralName.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public RoleSyntax(GeneralNames roleAuthority, GeneralName roleName) { if (roleName == null || roleName.TagNo != 6 || ((IAsn1String)roleName.Name).GetString().Equals("")) throw new ArgumentException("the role name MUST be non empty and MUST use the URI option of GeneralName"); m_roleAuthority = roleAuthority; m_roleName = roleName; } public RoleSyntax(GeneralName roleName) : this(null, roleName) { } public RoleSyntax(string roleName) : this(new GeneralName(6, (roleName == null) ? "" : roleName)) { } public string GetRoleNameAsString() { return ((IAsn1String)m_roleName.Name).GetString(); } public string[] GetRoleAuthorityAsString() { if (m_roleAuthority == null || m_roleAuthority.Count == 0) return new string[0]; GeneralName[] names = m_roleAuthority.GetNames(); string[] array = new string[names.Length]; for (int i = 0; i < names.Length; i++) { Asn1Encodable name = names[i].Name; IAsn1String asn1String = name as IAsn1String; if (asn1String != null) array[i] = asn1String.GetString(); else array[i] = name.ToString(); } return array; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); asn1EncodableVector.AddOptionalTagged(false, 0, m_roleAuthority); asn1EncodableVector.Add(new DerTaggedObject(true, 1, m_roleName)); return new DerSequence(asn1EncodableVector); } public override string ToString() { StringBuilder stringBuilder = new StringBuilder("Name: " + GetRoleNameAsString() + " - Auth: "); if (m_roleAuthority == null || m_roleAuthority.Count == 0) stringBuilder.Append("N/A"); else { string[] roleAuthorityAsString = GetRoleAuthorityAsString(); stringBuilder.Append('[').Append(roleAuthorityAsString[0]); for (int i = 1; i < roleAuthorityAsString.Length; i++) { stringBuilder.Append(", ").Append(roleAuthorityAsString[i]); } stringBuilder.Append(']'); } return stringBuilder.ToString(); } } }