Esempio n. 1
0
        private byte[] CreateSignatureFile(ZipFile outputJar, Manifest manifest, HashAlgorithmInfo hashAlgorithmInfo)
        {
            try
            {
                Log.Trace("Creating CERT.SF");
                var signatureFile = new Manifest();
                signatureFile.MainSection.Name  = "Signature-Version";
                signatureFile.MainSection.Value = "1.0";
                signatureFile.MainSection.Add(new ManifestEntry(hashAlgorithmInfo.DigestName + "-Manifest-Main-Attributes", manifest.MainSection.Digest));
                signatureFile.MainSection.Add(new ManifestEntry(hashAlgorithmInfo.DigestName + "-Manifest", manifest.Digest));
                signatureFile.MainSection.Add(new ManifestEntry("Created-By", CreatedBy));

                foreach (var additionalSection in manifest.AdditionalSections)
                {
                    Log.Trace($"creating entry for ${additionalSection.Value.Value}");
                    var signatureSection = new ManifestSection
                    {
                        Name  = additionalSection.Value.Name,
                        Value = additionalSection.Value.Value
                    };
                    signatureSection.Add(new ManifestEntry(hashAlgorithmInfo.DigestName, additionalSection.Value.Digest));
                    signatureFile.AdditionalSections[signatureSection.Value] = signatureSection;
                }

                var signatureData = new MemoryStream();
                signatureFile.Write(signatureData, hashAlgorithmInfo);

                var signatureDataRaw = signatureData.ToArray();
                outputJar.Add(new StreamDataSource(new MemoryStream(signatureDataRaw)), SignatureName);

                Log.Trace("CERT.SF created");

                return(signatureDataRaw);
            }
            catch (Exception e)
            {
                Log.Error(e, "CERT.SF creation failed");
                throw;
            }
        }