private static byte[] HashStream(Stream stream, ImageWriter writer, out int strong_name_pointer)
{
Section section = writer.text;
int headerSize = (int)writer.GetHeaderSize();
int pointerToRawData = (int)section.PointerToRawData;
DataDirectory strongNameSignatureDirectory = writer.GetStrongNameSignatureDirectory();
if (strongNameSignatureDirectory.Size == 0)
{
throw new InvalidOperationException();
}
strong_name_pointer = (int)((long)pointerToRawData + (ulong)(strongNameSignatureDirectory.VirtualAddress - section.VirtualAddress));
int size = (int)strongNameSignatureDirectory.Size;
SHA1Managed sHA1Managed = new SHA1Managed();
byte[] numArray = new byte[8192];
using (CryptoStream cryptoStream = new CryptoStream(Stream.Null, sHA1Managed, CryptoStreamMode.Write))
{
stream.Seek((long)0, SeekOrigin.Begin);
CryptoService.CopyStreamChunk(stream, cryptoStream, numArray, headerSize);
stream.Seek((long)pointerToRawData, SeekOrigin.Begin);
CryptoService.CopyStreamChunk(stream, cryptoStream, numArray, strong_name_pointer - pointerToRawData);
stream.Seek((long)size, SeekOrigin.Current);
CryptoService.CopyStreamChunk(stream, cryptoStream, numArray, (int)(stream.Length - (long)(strong_name_pointer + size)));
}
return(sHA1Managed.Hash);
}