Target
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Asn1.X509
{
public class Target : Asn1Encodable, IAsn1Choice
{
public enum Choice
{
Name,
Group
}
private readonly GeneralName targetName;
private readonly GeneralName targetGroup;
public virtual GeneralName TargetGroup => targetGroup;
public virtual GeneralName TargetName => targetName;
public static Target GetInstance(object obj)
{
Target target = obj as Target;
if (target != null)
return target;
Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject;
if (asn1TaggedObject != null)
return new Target(asn1TaggedObject);
throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
}
public static Target GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance);
}
public static Target GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance);
}
private Target(Asn1TaggedObject tagObj)
{
switch (tagObj.TagNo) {
case 0:
targetName = GeneralName.GetInstance(tagObj, true);
break;
case 1:
targetGroup = GeneralName.GetInstance(tagObj, true);
break;
default:
throw new ArgumentException("unknown tag: " + tagObj.TagNo.ToString());
}
}
public Target(Choice type, GeneralName name)
: this(new DerTaggedObject((int)type, name))
{
}
public override Asn1Object ToAsn1Object()
{
if (targetName != null)
return new DerTaggedObject(true, 0, targetName);
return new DerTaggedObject(true, 1, targetGroup);
}
}
}