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

RoleSyntax

public class RoleSyntax : Asn1Encodable
using System; using System.Text; namespace Org.BouncyCastle.Asn1.X509 { public class RoleSyntax : Asn1Encodable { private readonly GeneralNames roleAuthority; private readonly GeneralName roleName; public GeneralNames RoleAuthority => roleAuthority; public GeneralName RoleName => roleName; public static RoleSyntax GetInstance(object obj) { if (obj is RoleSyntax) return (RoleSyntax)obj; if (obj != null) return new RoleSyntax(Asn1Sequence.GetInstance(obj)); return null; } 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"); this.roleAuthority = roleAuthority; this.roleName = roleName; } public RoleSyntax(GeneralName roleName) : this(null, roleName) { } public RoleSyntax(string roleName) : this(new GeneralName(6, (roleName == null) ? "" : roleName)) { } private RoleSyntax(Asn1Sequence seq) { int num; if (seq.Count < 1 || seq.Count > 2) { num = seq.Count; throw new ArgumentException("Bad sequence size: " + num.ToString()); } for (int i = 0; i != seq.Count; i++) { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]); num = instance.TagNo; switch (num) { case 0: roleAuthority = GeneralNames.GetInstance(instance, false); break; case 1: roleName = GeneralName.GetInstance(instance, true); break; default: throw new ArgumentException("Unknown tag in RoleSyntax"); } } } public string GetRoleNameAsString() { return ((IAsn1String)roleName.Name).GetString(); } public string[] GetRoleAuthorityAsString() { if (roleAuthority == null) return new string[0]; GeneralName[] names = roleAuthority.GetNames(); string[] array = new string[names.Length]; for (int i = 0; i < names.Length; i++) { Asn1Encodable name = names[i].Name; if (name is IAsn1String) array[i] = ((IAsn1String)name).GetString(); else array[i] = name.ToString(); } return array; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); asn1EncodableVector.AddOptionalTagged(false, 0, roleAuthority); asn1EncodableVector.Add(new DerTaggedObject(true, 1, roleName)); return new DerSequence(asn1EncodableVector); } public override string ToString() { StringBuilder stringBuilder = new StringBuilder("Name: " + GetRoleNameAsString() + " - Auth: "); if (roleAuthority == null || roleAuthority.GetNames().Length == 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(); } } }