using System.Collections; namespace Org.BouncyCastle.Asn1.X9 { /** * ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See * RFC 2631, or X9.42, for further details. */ public class OtherInfo : Asn1Encodable { private KeySpecificInfo keyInfo; private Asn1OctetString partyAInfo; private Asn1OctetString suppPubInfo; public OtherInfo( KeySpecificInfo keyInfo, Asn1OctetString partyAInfo, Asn1OctetString suppPubInfo) { this.keyInfo = keyInfo; this.partyAInfo = partyAInfo; this.suppPubInfo = suppPubInfo; } public OtherInfo( Asn1Sequence seq) { IEnumerator e = seq.GetEnumerator(); e.MoveNext(); keyInfo = new KeySpecificInfo((Asn1Sequence) e.Current); while (e.MoveNext()) { DerTaggedObject o = (DerTaggedObject) e.Current; if (o.TagNo == 0) { partyAInfo = (Asn1OctetString) o.GetObject(); } else if ((int) o.TagNo == 2) { suppPubInfo = (Asn1OctetString) o.GetObject(); } } } public KeySpecificInfo KeyInfo { get { return keyInfo; } } public Asn1OctetString PartyAInfo { get { return partyAInfo; } } public Asn1OctetString SuppPubInfo { get { return suppPubInfo; } } /** * Produce an object suitable for an Asn1OutputStream. *
         *  OtherInfo ::= Sequence {
         *      keyInfo KeySpecificInfo,
         *      partyAInfo [0] OCTET STRING OPTIONAL,
         *      suppPubInfo [2] OCTET STRING
         *  }
         * 
*/ public override Asn1Object ToAsn1Object() { Asn1EncodableVector v = new Asn1EncodableVector(keyInfo); if (partyAInfo != null) { v.Add(new DerTaggedObject(0, partyAInfo)); } v.Add(new DerTaggedObject(2, suppPubInfo)); return new DerSequence(v); } } }