EncKeyWithID
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using System;
namespace Org.BouncyCastle.Asn1.Crmf
{
public class EncKeyWithID : Asn1Encodable
{
private readonly PrivateKeyInfo m_privKeyInfo;
private readonly Asn1Encodable m_identifier;
public virtual PrivateKeyInfo PrivateKey => m_privKeyInfo;
public virtual bool HasIdentifier => m_identifier != null;
public virtual bool IsIdentifierUtf8String => m_identifier is DerUtf8String;
public virtual Asn1Encodable Identifier => m_identifier;
public static EncKeyWithID GetInstance(object obj)
{
if (obj == null)
return null;
EncKeyWithID encKeyWithID = obj as EncKeyWithID;
if (encKeyWithID != null)
return encKeyWithID;
return new EncKeyWithID(Asn1Sequence.GetInstance(obj));
}
public static EncKeyWithID GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EncKeyWithID(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static EncKeyWithID GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EncKeyWithID(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private static Asn1Encodable GetOptionalChoice(Asn1Encodable element)
{
DerUtf8String optional = DerUtf8String.GetOptional(element);
if (optional != null)
return optional;
return GeneralName.GetInstance(element);
}
private EncKeyWithID(Asn1Sequence seq)
{
int count = seq.Count;
if (count < 1 || count > 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_privKeyInfo = PrivateKeyInfo.GetInstance(seq[0]);
if (count > 1)
m_identifier = GetOptionalChoice(seq[1]);
}
private EncKeyWithID(PrivateKeyInfo privKeyInfo, Asn1Encodable identifier)
{
if (privKeyInfo == null)
throw new ArgumentNullException("privKeyInfo");
m_privKeyInfo = privKeyInfo;
m_identifier = identifier;
}
public EncKeyWithID(PrivateKeyInfo privKeyInfo)
: this(privKeyInfo, (Asn1Encodable)null)
{
}
public EncKeyWithID(PrivateKeyInfo privKeyInfo, DerUtf8String str)
: this(privKeyInfo, (Asn1Encodable)str)
{
}
public EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName)
: this(privKeyInfo, (Asn1Encodable)generalName)
{
}
public override Asn1Object ToAsn1Object()
{
if (m_identifier != null)
return new DerSequence(m_privKeyInfo, m_identifier);
return new DerSequence(m_privKeyInfo);
}
}
}