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