GetHeaderSize() public method

public GetHeaderSize ( ) : uint
return uint
Esempio n. 1
0
        static byte[] HashStream(Stream stream, ImageWriter writer, out int strong_name_pointer)
        {
            const int buffer_size = 8192;

            var text = writer.text;
            var header_size = (int) writer.GetHeaderSize ();
            var text_section_pointer = (int) text.PointerToRawData;
            var strong_name_directory = writer.GetStrongNameSignatureDirectory ();

            if (strong_name_directory.Size == 0)
                throw new InvalidOperationException ();

            strong_name_pointer = (int) (text_section_pointer
                + (strong_name_directory.VirtualAddress - text.VirtualAddress));
            var strong_name_length = (int) strong_name_directory.Size;

            var sha1 = new SHA1Managed ();
            var buffer = new byte [buffer_size];
            using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write)) {

                stream.Seek (0, SeekOrigin.Begin);
                CopyStreamChunk (stream, crypto_stream, buffer, header_size);

                stream.Seek (text_section_pointer, SeekOrigin.Begin);
                CopyStreamChunk (stream, crypto_stream, buffer, (int) strong_name_pointer - text_section_pointer);

                stream.Seek (strong_name_length, SeekOrigin.Current);
                CopyStreamChunk (stream, crypto_stream, buffer, (int) (stream.Length - (strong_name_pointer + strong_name_length)));
            }

            return sha1.Hash;
        }