MQVuserKeyingMaterial
using System;
namespace Org.BouncyCastle.Asn1.Cms.Ecc
{
    public class MQVuserKeyingMaterial : Asn1Encodable
    {
        private readonly OriginatorPublicKey m_ephemeralPublicKey;
        private readonly Asn1OctetString m_addedukm;
        public OriginatorPublicKey EphemeralPublicKey => m_ephemeralPublicKey;
        public Asn1OctetString AddedUkm => m_addedukm;
        public static MQVuserKeyingMaterial GetInstance(object obj)
        {
            if (obj == null)
                return null;
            MQVuserKeyingMaterial mQVuserKeyingMaterial = obj as MQVuserKeyingMaterial;
            if (mQVuserKeyingMaterial != null)
                return mQVuserKeyingMaterial;
            return new MQVuserKeyingMaterial(Asn1Sequence.GetInstance(obj));
        }
        public static MQVuserKeyingMaterial GetInstance(Asn1TaggedObject obj, bool isExplicit)
        {
            return new MQVuserKeyingMaterial(Asn1Sequence.GetInstance(obj, isExplicit));
        }
        public static MQVuserKeyingMaterial GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
        {
            return new MQVuserKeyingMaterial(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
        }
        public MQVuserKeyingMaterial(OriginatorPublicKey ephemeralPublicKey, Asn1OctetString addedukm)
        {
            if (ephemeralPublicKey == null)
                throw new ArgumentNullException("ephemeralPublicKey");
            m_ephemeralPublicKey = ephemeralPublicKey;
            m_addedukm = addedukm;
        }
        private MQVuserKeyingMaterial(Asn1Sequence seq)
        {
            int count = seq.Count;
            int sequencePosition = 0;
            if (count < 1 || count > 2)
                throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
            m_ephemeralPublicKey = OriginatorPublicKey.GetInstance(seq[sequencePosition++]);
            m_addedukm = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, Asn1OctetString.GetTagged);
            if (sequencePosition != count)
                throw new ArgumentException("Unexpected elements in sequence", "seq");
        }
        public override Asn1Object ToAsn1Object()
        {
            Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2);
            asn1EncodableVector.Add(m_ephemeralPublicKey);
            asn1EncodableVector.AddOptionalTagged(true, 0, m_addedukm);
            return new DerSequence(asn1EncodableVector);
        }
    }
}