private Stream Open(Stream outStream, AlgorithmIdentifier encAlgID, ICipherParameters cipherParameters, Asn1EncodableVector recipientInfos)
 {
     //IL_0120: Expected O, but got Unknown
     try
     {
         BerSequenceGenerator berSequenceGenerator = new BerSequenceGenerator(outStream);
         berSequenceGenerator.AddObject(CmsObjectIdentifiers.EnvelopedData);
         BerSequenceGenerator berSequenceGenerator2 = new BerSequenceGenerator(berSequenceGenerator.GetRawOutputStream(), 0, isExplicit: true);
         berSequenceGenerator2.AddObject(Version);
         Stream        rawOutputStream = berSequenceGenerator2.GetRawOutputStream();
         Asn1Generator asn1Generator   = (_berEncodeRecipientSet ? ((Asn1Generator) new BerSetGenerator(rawOutputStream)) : ((Asn1Generator) new DerSetGenerator(rawOutputStream)));
         global::System.Collections.IEnumerator enumerator = recipientInfos.GetEnumerator();
         try
         {
             while (enumerator.MoveNext())
             {
                 Asn1Encodable obj = (Asn1Encodable)enumerator.get_Current();
                 asn1Generator.AddObject(obj);
             }
         }
         finally
         {
             global::System.IDisposable disposable = enumerator as global::System.IDisposable;
             if (disposable != null)
             {
                 disposable.Dispose();
             }
         }
         asn1Generator.Close();
         BerSequenceGenerator berSequenceGenerator3 = new BerSequenceGenerator(rawOutputStream);
         berSequenceGenerator3.AddObject(CmsObjectIdentifiers.Data);
         berSequenceGenerator3.AddObject(encAlgID);
         Stream          stream = CmsUtilities.CreateBerOctetOutputStream(berSequenceGenerator3.GetRawOutputStream(), 0, isExplicit: false, _bufferSize);
         IBufferedCipher cipher = CipherUtilities.GetCipher(encAlgID.Algorithm);
         cipher.Init(forEncryption: true, new ParametersWithRandom(cipherParameters, rand));
         CipherStream outStream2 = new CipherStream(stream, null, cipher);
         return((Stream)(object)new CmsEnvelopedDataOutputStream(this, outStream2, berSequenceGenerator, berSequenceGenerator2, berSequenceGenerator3));
     }
     catch (SecurityUtilityException e)
     {
         throw new CmsException("couldn't create cipher.", e);
     }
     catch (InvalidKeyException e2)
     {
         throw new CmsException("key invalid in message.", e2);
     }
     catch (IOException val)
     {
         IOException e3 = val;
         throw new CmsException("exception decoding algorithm parameters.", (global::System.Exception)(object) e3);
     }
 }
        public SignerInformationStore GetCounterSignatures()
        {
            Org.BouncyCastle.Asn1.Cms.AttributeTable unsignedAttributes = UnsignedAttributes;
            if (unsignedAttributes == null)
            {
                return(new SignerInformationStore((global::System.Collections.ICollection)Platform.CreateArrayList(0)));
            }
            global::System.Collections.IList list = Platform.CreateArrayList();
            Asn1EncodableVector all = unsignedAttributes.GetAll(CmsAttributes.CounterSignature);

            global::System.Collections.IEnumerator enumerator = all.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    Attribute attribute  = (Attribute)enumerator.get_Current();
                    Asn1Set   attrValues = attribute.AttrValues;
                    _ = attrValues.Count;
                    _ = 1;
                    {
                        global::System.Collections.IEnumerator enumerator2 = attrValues.GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                Asn1Encodable asn1Encodable = (Asn1Encodable)enumerator2.get_Current();
                                Org.BouncyCastle.Asn1.Cms.SignerInfo instance = Org.BouncyCastle.Asn1.Cms.SignerInfo.GetInstance(asn1Encodable.ToAsn1Object());
                                string digestAlgName = CmsSignedHelper.Instance.GetDigestAlgName(instance.DigestAlgorithm.Algorithm.Id);
                                list.Add((object)new SignerInformation(instance, null, null, new CounterSignatureDigestCalculator(digestAlgName, GetSignature())));
                            }
                        }
                        finally
                        {
                            global::System.IDisposable disposable2 = enumerator2 as global::System.IDisposable;
                            if (disposable2 != null)
                            {
                                disposable2.Dispose();
                            }
                        }
                    }
                }
            }
            finally
            {
                global::System.IDisposable disposable = enumerator as global::System.IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
            return(new SignerInformationStore((global::System.Collections.ICollection)list));
        }
 protected Stream Open(Stream outStr, AlgorithmIdentifier macAlgId, ICipherParameters cipherParameters, Asn1EncodableVector recipientInfos)
 {
     //IL_011d: Expected O, but got Unknown
     try
     {
         BerSequenceGenerator berSequenceGenerator = new BerSequenceGenerator(outStr);
         berSequenceGenerator.AddObject(CmsObjectIdentifiers.AuthenticatedData);
         BerSequenceGenerator berSequenceGenerator2 = new BerSequenceGenerator(berSequenceGenerator.GetRawOutputStream(), 0, isExplicit: true);
         berSequenceGenerator2.AddObject(new DerInteger(AuthenticatedData.CalculateVersion(null)));
         Stream        rawOutputStream = berSequenceGenerator2.GetRawOutputStream();
         Asn1Generator asn1Generator   = (_berEncodeRecipientSet ? ((Asn1Generator) new BerSetGenerator(rawOutputStream)) : ((Asn1Generator) new DerSetGenerator(rawOutputStream)));
         global::System.Collections.IEnumerator enumerator = recipientInfos.GetEnumerator();
         try
         {
             while (enumerator.MoveNext())
             {
                 Asn1Encodable obj = (Asn1Encodable)enumerator.get_Current();
                 asn1Generator.AddObject(obj);
             }
         }
         finally
         {
             global::System.IDisposable disposable = enumerator as global::System.IDisposable;
             if (disposable != null)
             {
                 disposable.Dispose();
             }
         }
         asn1Generator.Close();
         berSequenceGenerator2.AddObject(macAlgId);
         BerSequenceGenerator berSequenceGenerator3 = new BerSequenceGenerator(rawOutputStream);
         berSequenceGenerator3.AddObject(CmsObjectIdentifiers.Data);
         Stream output = CmsUtilities.CreateBerOctetOutputStream(berSequenceGenerator3.GetRawOutputStream(), 0, isExplicit: false, _bufferSize);
         IMac   mac    = MacUtilities.GetMac(macAlgId.Algorithm);
         mac.Init(cipherParameters);
         Stream macStream = (Stream)(object)new TeeOutputStream(output, (Stream)(object)new MacOutputStream(mac));
         return((Stream)(object)new CmsAuthenticatedDataOutputStream(macStream, mac, berSequenceGenerator, berSequenceGenerator2, berSequenceGenerator3));
     }
     catch (SecurityUtilityException e)
     {
         throw new CmsException("couldn't create cipher.", e);
     }
     catch (InvalidKeyException e2)
     {
         throw new CmsException("key invalid in message.", e2);
     }
     catch (IOException val)
     {
         IOException e3 = val;
         throw new CmsException("exception decoding algorithm parameters.", (global::System.Exception)(object) e3);
     }
 }
 public AttributeTable(Asn1EncodableVector v)
 {
     attributes = Platform.CreateHashtable(v.Count);
     global::System.Collections.IEnumerator enumerator = v.GetEnumerator();
     try
     {
         while (enumerator.MoveNext())
         {
             Asn1Encodable obj      = (Asn1Encodable)enumerator.get_Current();
             Attribute     instance = Attribute.GetInstance(obj);
             AddAttribute(instance);
         }
     }
     finally
     {
         global::System.IDisposable disposable = enumerator as global::System.IDisposable;
         if (disposable != null)
         {
             disposable.Dispose();
         }
     }
 }