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

90 lines
2.2 KiB
C#

using System;
using Org.BouncyCastle.Asn1.Crmf;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Asn1.Cmp;
public class CertifiedKeyPair : Asn1Encodable
{
private readonly CertOrEncCert certOrEncCert;
private readonly EncryptedValue privateKey;
private readonly PkiPublicationInfo publicationInfo;
public virtual CertOrEncCert CertOrEncCert => certOrEncCert;
public virtual EncryptedValue PrivateKey => privateKey;
public virtual PkiPublicationInfo PublicationInfo => publicationInfo;
private CertifiedKeyPair(Asn1Sequence seq)
{
certOrEncCert = CertOrEncCert.GetInstance(seq[0]);
if (seq.Count < 2)
{
return;
}
if (seq.Count == 2)
{
Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[1]);
if (instance.TagNo == 0)
{
privateKey = EncryptedValue.GetInstance(instance.GetObject());
}
else
{
publicationInfo = PkiPublicationInfo.GetInstance(instance.GetObject());
}
}
else
{
privateKey = EncryptedValue.GetInstance(Asn1TaggedObject.GetInstance(seq[1]));
publicationInfo = PkiPublicationInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[2]));
}
}
public static CertifiedKeyPair GetInstance(object obj)
{
if (obj is CertifiedKeyPair)
{
return (CertifiedKeyPair)obj;
}
if (obj is Asn1Sequence)
{
return new CertifiedKeyPair((Asn1Sequence)obj);
}
throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
}
public CertifiedKeyPair(CertOrEncCert certOrEncCert)
: this(certOrEncCert, null, null)
{
}
public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedValue privateKey, PkiPublicationInfo publicationInfo)
{
if (certOrEncCert == null)
{
throw new ArgumentNullException("certOrEncCert");
}
this.certOrEncCert = certOrEncCert;
this.privateKey = privateKey;
this.publicationInfo = publicationInfo;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(certOrEncCert);
if (privateKey != null)
{
asn1EncodableVector.Add(new DerTaggedObject(explicitly: true, 0, privateKey));
}
if (publicationInfo != null)
{
asn1EncodableVector.Add(new DerTaggedObject(explicitly: true, 1, publicationInfo));
}
return new DerSequence(asn1EncodableVector);
}
}