Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Asn1/X509/Target.cs
2025-10-09 09:57:24 +09:00

64 lines
1.3 KiB
C#

using System;
using Org.BouncyCastle.Utilities;
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)
{
if (obj is Target)
{
return (Target)obj;
}
if (obj is Asn1TaggedObject)
{
return new Target((Asn1TaggedObject)obj);
}
throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
}
private Target(Asn1TaggedObject tagObj)
{
switch ((Choice)tagObj.TagNo)
{
case Choice.Name:
targetName = GeneralName.GetInstance(tagObj, explicitly: true);
break;
case Choice.Group:
targetGroup = GeneralName.GetInstance(tagObj, explicitly: true);
break;
default:
throw new ArgumentException("unknown tag: " + tagObj.TagNo);
}
}
public Target(Choice type, GeneralName name)
: this(new DerTaggedObject((int)type, name))
{
}
public override Asn1Object ToAsn1Object()
{
if (targetName != null)
{
return new DerTaggedObject(explicitly: true, 0, targetName);
}
return new DerTaggedObject(explicitly: true, 1, targetGroup);
}
}