public override bool Equals(
            Object o)
        {
            if (!(o is KeyTransRecipientID))
            {
                return(false);
            }

            KeyTransRecipientID id = (KeyTransRecipientID)o;

            return(this.baseSelector.Equals(id.baseSelector));
        }
        /**
         * Return possible empty collection with recipients matching the passed in RecipientID
         *
         * @param selector a recipient id to select against.
         * @return a collection of RecipientInformation objects.
         */
        public ICollection <RecipientInformation> GetMatches(ISelector <RecipientInformation> selector)
        {
            if (selector is KeyTransRecipientID)
            {
                KeyTransRecipientID keyTrans = (KeyTransRecipientID)selector;

                X500Name issuer       = keyTrans.Issuer;
                byte[]   subjectKeyId = keyTrans.GetSubjectKeyIdentifier();

                if (issuer != null && subjectKeyId != null)
                {
                    IList <RecipientInformation> results = new List <RecipientInformation>();

                    ICollection <RecipientInformation> match1 = GetMatches(new KeyTransRecipientID(issuer, keyTrans.SerialNumber));
                    if (match1 != null)
                    {
                        for (IEnumerator <RecipientInformation> en = match1.GetEnumerator(); en.MoveNext();)
                        {
                            results.Add(en.Current);
                        }
                    }

                    ICollection <RecipientInformation> match2 = GetMatches(new KeyTransRecipientID(subjectKeyId));
                    if (match2 != null)
                    {
                        for (IEnumerator <RecipientInformation> en = match2.GetEnumerator(); en.MoveNext();)
                        {
                            results.Add(en.Current);
                        }
                    }

                    return(results);
                }
            }

            IList <RecipientInformation> list = (IList <RecipientInformation>)table[selector];

            return(list == null ? new List <RecipientInformation>(0) : new List <RecipientInformation>(list));
        }
        internal KeyTransRecipientInformation(
            KeyTransRecipientInfo info,
            AlgorithmIdentifier messageAlgorithm,
            ICmsSecureReadable secureReadable,
            IAuthAttributesProvider additionalData) : base(info.KeyEncryptionAlgorithm, messageAlgorithm, secureReadable, additionalData)

        {
            this.info = info;

            RecipientIdentifier r = info.RecipientIdentifier;

            if (r.IsTagged)
            {
                Asn1OctetString octs = Asn1OctetString.GetInstance(r.ID);

                rid = new KeyTransRecipientID(octs.GetOctets()) as IRecipientID <RecipientInformation>;
            }
            else
            {
                IssuerAndSerialNumber iAnds = IssuerAndSerialNumber.GetInstance(r.ID);

                rid = new KeyTransRecipientID(iAnds.Name, iAnds.SerialNumber.Value) as IRecipientID <RecipientInformation>;
            }
        }