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

103 lines
2.7 KiB
C#

using System;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Asn1.X509;
public class AttributeCertificateInfo : Asn1Encodable
{
internal readonly DerInteger version;
internal readonly Holder holder;
internal readonly AttCertIssuer issuer;
internal readonly AlgorithmIdentifier signature;
internal readonly DerInteger serialNumber;
internal readonly AttCertValidityPeriod attrCertValidityPeriod;
internal readonly Asn1Sequence attributes;
internal readonly DerBitString issuerUniqueID;
internal readonly X509Extensions extensions;
public DerInteger Version => version;
public Holder Holder => holder;
public AttCertIssuer Issuer => issuer;
public AlgorithmIdentifier Signature => signature;
public DerInteger SerialNumber => serialNumber;
public AttCertValidityPeriod AttrCertValidityPeriod => attrCertValidityPeriod;
public Asn1Sequence Attributes => attributes;
public DerBitString IssuerUniqueID => issuerUniqueID;
public X509Extensions Extensions => extensions;
public static AttributeCertificateInfo GetInstance(Asn1TaggedObject obj, bool isExplicit)
{
return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
}
public static AttributeCertificateInfo GetInstance(object obj)
{
if (obj is AttributeCertificateInfo)
{
return (AttributeCertificateInfo)obj;
}
if (obj is Asn1Sequence)
{
return new AttributeCertificateInfo((Asn1Sequence)obj);
}
throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
}
private AttributeCertificateInfo(Asn1Sequence seq)
{
if (seq.Count < 7 || seq.Count > 9)
{
throw new ArgumentException("Bad sequence size: " + seq.Count);
}
version = DerInteger.GetInstance(seq[0]);
holder = Holder.GetInstance(seq[1]);
issuer = AttCertIssuer.GetInstance(seq[2]);
signature = AlgorithmIdentifier.GetInstance(seq[3]);
serialNumber = DerInteger.GetInstance(seq[4]);
attrCertValidityPeriod = AttCertValidityPeriod.GetInstance(seq[5]);
attributes = Asn1Sequence.GetInstance(seq[6]);
for (int i = 7; i < seq.Count; i++)
{
Asn1Encodable asn1Encodable = seq[i];
if (asn1Encodable is DerBitString)
{
issuerUniqueID = DerBitString.GetInstance(seq[i]);
}
else if (asn1Encodable is Asn1Sequence || asn1Encodable is X509Extensions)
{
extensions = X509Extensions.GetInstance(seq[i]);
}
}
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(version, holder, issuer, signature, serialNumber, attrCertValidityPeriod, attributes);
if (issuerUniqueID != null)
{
asn1EncodableVector.Add(issuerUniqueID);
}
if (extensions != null)
{
asn1EncodableVector.Add(extensions);
}
return new DerSequence(asn1EncodableVector);
}
}