using System; using Org.BouncyCastle.Asn1.Pkcs; using Org.BouncyCastle.Asn1.X509; namespace Org.BouncyCastle.Asn1.Crmf { public class EncKeyWithID : Asn1Encodable { private readonly PrivateKeyInfo privKeyInfo; private readonly Asn1Encodable identifier; public static EncKeyWithID GetInstance(object obj) { if (obj is EncKeyWithID) return (EncKeyWithID)obj; if (obj != null) return new EncKeyWithID(Asn1Sequence.GetInstance(obj)); return null; } private EncKeyWithID(Asn1Sequence seq) { this.privKeyInfo = PrivateKeyInfo.GetInstance(seq[0]); if (seq.Count > 1) { if (!(seq[1] is DerUtf8String)) { this.identifier = GeneralName.GetInstance(seq[1]); } else { this.identifier = seq[1]; } } else { this.identifier = null; } } public EncKeyWithID(PrivateKeyInfo privKeyInfo) { this.privKeyInfo = privKeyInfo; this.identifier = null; } public EncKeyWithID(PrivateKeyInfo privKeyInfo, DerUtf8String str) { this.privKeyInfo = privKeyInfo; this.identifier = str; } public EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName) { this.privKeyInfo = privKeyInfo; this.identifier = generalName; } public virtual PrivateKeyInfo PrivateKey { get { return privKeyInfo; } } public virtual bool HasIdentifier { get { return identifier != null; } } public virtual bool IsIdentifierUtf8String { get { return identifier is DerUtf8String; } } public virtual Asn1Encodable Identifier { get { return identifier; } } /** *
         * EncKeyWithID ::= SEQUENCE {
         *      privateKey           PrivateKeyInfo,
         *      identifier CHOICE {
         *         string               UTF8String,
         *         generalName          GeneralName
         *     } OPTIONAL
         * }
         * 
* @return */ public override Asn1Object ToAsn1Object() { Asn1EncodableVector v = new Asn1EncodableVector(privKeyInfo); v.AddOptional(identifier); return new DerSequence(v); } } }