public void ReadAsicEWithoutManifestAndSignature()
        {
            using (var zipOutStream = new MemoryStream())
            {
                using (var createdArchive = new ZipArchive(zipOutStream, ZipArchiveMode.Create))
                {
                    var newEntry = createdArchive.CreateEntry(AsiceConstants.FileNameMimeType);
                    using (var entryStream = newEntry.Open())
                    {
                        entryStream.Write(Encoding.UTF8.GetBytes(AsiceConstants.ContentTypeASiCe));
                    }
                }

                using (var zipInStream = new MemoryStream(zipOutStream.ToArray()))
                {
                    using (var readArchive = new ZipArchive(zipInStream, ZipArchiveMode.Read))
                    {
                        var asiceArchive = AsiceReadModel.Create(readArchive);
                        asiceArchive.Should().NotBeNull();
                        asiceArchive.Entries.Count().Should().Be(0);
                        asiceArchive.CadesManifest.Should().BeNull();
                    }
                }
            }
        }
 public void ReadEmptyAsicE()
 {
     using (var zipOutStream = new MemoryStream())
     {
         var createdArchive = new ZipArchive(zipOutStream, ZipArchiveMode.Create);
         createdArchive.Dispose();
         using (var zipInStream = new MemoryStream(zipOutStream.ToArray()))
         {
             using (var readArchive = new ZipArchive(zipInStream, ZipArchiveMode.Read))
             {
                 Action createAction = () => AsiceReadModel.Create(readArchive);
                 createAction.Should().Throw <ArgumentException>().And.ParamName.Should().Be("zipArchive");
             }
         }
     }
 }
        public void ReadAsiceWithCadesManifestAndSignature()
        {
            var          signingCertificates = TestdataLoader.ReadCertificatesForTest();
            const string contentFile         = "filename.txt";
            const string content             = "Lorem ipsum";

            using (var outputStream = new MemoryStream())
            {
                using (var textFileStream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
                    using (var asiceBuilder = AsiceBuilder.Create(outputStream, MessageDigestAlgorithm.SHA256Desig, signingCertificates))
                    {
                        asiceBuilder.AddFile(textFileStream, contentFile, MimeType.ForString("text/plain"));
                        asiceBuilder.Build().Should().NotBeNull();
                    }

                using (var readStream = new MemoryStream(outputStream.ToArray()))
                    using (var zip = new ZipArchive(readStream))
                    {
                        var asicePackage = AsiceReadModel.Create(zip);
                        var entries      = asicePackage.Entries;
                        entries.Count().Should().Be(1);
                        var cadesManifest = asicePackage.CadesManifest;
                        cadesManifest.Should().NotBeNull();

                        cadesManifest.Digests.Count.Should().Be(1);
                        asicePackage.DigestVerifier.Should().NotBeNull();
                        cadesManifest.SignatureFileName.Should().NotBeNull();
                        asicePackage.Signatures.Should().NotBeNull();
                        asicePackage.Signatures.Containers.Count().Should().Be(1);

                        var firstEntry = entries.First();
                        using (var entryStream = firstEntry.OpenStream())
                            using (var memoryStream = new MemoryStream())
                            {
                                entryStream.CopyTo(memoryStream);
                                Encoding.UTF8.GetString(memoryStream.ToArray()).Should().Be(content);
                            }

                        var verificationResult = asicePackage.DigestVerifier.Verification();
                        verificationResult.Should().NotBeNull();
                        verificationResult.AllValid.Should().BeTrue();
                    }
            }
        }
        public void ReadAsiceResource()
        {
            using (var asicStream = TestDataUtil.ReadValidAsiceCadesFromResource())
            {
                using (var zip = new ZipArchive(asicStream, ZipArchiveMode.Read))
                    using (var asice = AsiceReadModel.Create(zip))
                    {
                        asice.CadesManifest.Should().NotBeNull();
                        asice.Signatures.Should().NotBeNull();
                        foreach (var asiceReadEntry in asice.Entries)
                        {
                            using (var entryStream = asiceReadEntry.OpenStream())
                                using (var bufferStream = new MemoryStream())
                                {
                                    entryStream.CopyTo(bufferStream);
                                    bufferStream.Position.Should().BeGreaterThan(0);
                                }
                        }

                        asice.DigestVerifier.Verification().AllValid.Should().BeTrue();
                    }
            }
        }
        public void ReadAsicEWithoutRequiredFirstEntry()
        {
            using (var zipOutStream = new MemoryStream())
            {
                using (var createdArchive = new ZipArchive(zipOutStream, ZipArchiveMode.Create))
                {
                    var newEntry = createdArchive.CreateEntry("file.txt");
                    using (var entryStream = newEntry.Open())
                    {
                        entryStream.Write(Encoding.UTF8.GetBytes("Lorem Ipsum"));
                    }
                }

                using (var zipInStream = new MemoryStream(zipOutStream.ToArray()))
                {
                    using (var readArchive = new ZipArchive(zipInStream, ZipArchiveMode.Read))
                    {
                        Action createAction = () => AsiceReadModel.Create(readArchive);
                        createAction.Should().Throw <ArgumentException>().And.ParamName.Should().Be("zipArchive");
                    }
                }
            }
        }
        public AsiceReadModel Read(Stream inputStream)
        {
            var zipArchive = new ZipArchive(inputStream, ZipArchiveMode.Read);

            return(AsiceReadModel.Create(zipArchive));
        }