public static bool GetOpaqueContent(Stream inputStream, Stream outputStream) { bool result = false; int num = 0; using (Asn1Reader asn1Reader = new Asn1Reader(inputStream)) { while (asn1Reader.ReadNext() && asn1Reader.EncodingType == EncodingType.Sequence) { if (!asn1Reader.ReadFirstChild() || asn1Reader.EncodingType != EncodingType.ObjectIdentifier) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected ContentType=EncodingType.ObjectIdentifier", ++num); } else if (asn1Reader.ReadValueAsOID() != OID.RSASignedData) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected RSA_signedData OID", ++num); } else if (!asn1Reader.ReadNextSibling() || asn1Reader.TagClass != TagClass.Context || asn1Reader.TagNumber != 0) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected content tag", ++num); } else if (!asn1Reader.ReadFirstChild() || asn1Reader.EncodingType != EncodingType.Sequence) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected EncodingType.Sequence", ++num); } else if (!asn1Reader.ReadFirstChild() || asn1Reader.EncodingType != EncodingType.Integer) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected version number", ++num); } else if (!asn1Reader.ReadNextSibling() || asn1Reader.EncodingType != EncodingType.Set) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected digest algorithm set", ++num); } else if (!asn1Reader.ReadNextSibling() || asn1Reader.EncodingType != EncodingType.Sequence) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected content tag", ++num); } else if (!asn1Reader.ReadFirstChild() || asn1Reader.EncodingType != EncodingType.ObjectIdentifier) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected ContentType = EncodingType.ObjectIdentifier for SignedData", ++num); } else if (asn1Reader.ReadValueAsOID() != OID.RSAData) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected RSA_Data OID", ++num); } else if (!asn1Reader.ReadNextSibling()) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find any content in S/MIME blob", ++num); } else if (asn1Reader.TagClass != TagClass.Context || asn1Reader.TagNumber != 0) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected tag class or value for S/MIME blob", ++num); } else if (!asn1Reader.ReadFirstChild() || asn1Reader.EncodingType != EncodingType.OctetString) { StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected EncodingType for S/MIME blob", ++num); } else { BufferPoolCollection.BufferSize bufferSize = BufferPoolCollection.BufferSize.Size20K; BufferPool bufferPool = BufferPoolCollection.AutoCleanupCollection.Acquire(bufferSize); byte[] array = null; try { array = bufferPool.Acquire(); do { if (!asn1Reader.IsConstructedTag) { for (;;) { int num2 = asn1Reader.ReadBytesValue(array, 0, array.Length); if (num2 == 0) { break; } outputStream.Write(array, 0, num2); result = true; } } asn1Reader.ReadNext(); }while (asn1Reader.EncodingType == EncodingType.OctetString); continue; } finally { if (array != null) { bufferPool.Release(array); } } } return(result); } StorageGlobals.ContextTraceDebug <int>(ExTraceGlobals.CcInboundMimeTracer, "InboundMimeConverter.GetOpaqueContent ({0}): did not find expected ContentInfo=EncodingType.Sequence", ++num); } return(result); }