/// <summary> /// Calculates the signature for this package. /// </summary> /// <param name="package"> /// The package for whcih to calculate the signature. /// </param> /// <param name="privateKey"> /// The private key to use. /// </param> /// <param name="compressedPayloadStream"> /// The compressed payload. /// </param> public void CalculateSignature(RpmPackage package, PgpPrivateKey privateKey, Stream compressedPayloadStream) { RpmSignature signature = new RpmSignature(package); using (MemoryStream headerStream = this.GetHeaderStream(package)) using (ConcatStream headerAndPayloadStream = new ConcatStream(leaveOpen: true, streams: new Stream[] { headerStream, compressedPayloadStream })) { SHA1 sha = SHA1.Create(); signature.Sha1Hash = sha.ComputeHash(headerStream); MD5 md5 = MD5.Create(); signature.MD5Hash = md5.ComputeHash(headerAndPayloadStream); // Verify the PGP signatures // 3 for the header headerStream.Position = 0; signature.HeaderPgpSignature = PgpSigner.Sign(privateKey, headerStream); headerAndPayloadStream.Position = 0; signature.HeaderAndPayloadPgpSignature = PgpSigner.Sign(privateKey, headerAndPayloadStream); // Verify the signature size (header + compressed payload) signature.HeaderAndPayloadSize = (int)headerAndPayloadStream.Length; } // Verify the payload size (header + uncompressed payload) using (Stream payloadStream = RpmPayloadReader.GetDecompressedPayloadStream(package, compressedPayloadStream)) { signature.UncompressedPayloadSize = (int)payloadStream.Length; } }
public PgpSignature Sign(Stream payload) { return(PgpSigner.Sign(this.privateKey, payload)); }