Mono.Cecil.CryptoService.HashStream C# (CSharp) Method

HashStream() static private method

static private HashStream ( Stream stream, ImageWriter writer, int &strong_name_pointer ) : byte[]
stream Stream
writer ImageWriter
strong_name_pointer int
return byte[]
		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;
		}

Usage Example

Esempio n. 1
0
        public static void StrongName(Stream stream, ImageWriter writer, StrongNameKeyPair key_pair)
        {
            int num;

            byte[] numArray = CryptoService.CreateStrongName(key_pair, CryptoService.HashStream(stream, writer, out num));
            CryptoService.PatchStrongName(stream, num, numArray);
        }