RoleSyntax
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();
}
}
}