init commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
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)
|
||||
{
|
||||
if (seq.Count < 1 || seq.Count > 2)
|
||||
{
|
||||
throw new ArgumentException("Bad sequence size: " + seq.Count);
|
||||
}
|
||||
for (int i = 0; i != seq.Count; i++)
|
||||
{
|
||||
Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]);
|
||||
switch (instance.TagNo)
|
||||
{
|
||||
case 0:
|
||||
roleAuthority = GeneralNames.GetInstance(instance, explicitly: false);
|
||||
break;
|
||||
case 1:
|
||||
roleName = GeneralName.GetInstance(instance, explicitly: 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();
|
||||
if (roleAuthority != null)
|
||||
{
|
||||
asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 0, roleAuthority));
|
||||
}
|
||||
asn1EncodableVector.Add(new DerTaggedObject(explicitly: 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user