/// <summary> /// Computes the MD5 checksum of the content. /// </summary> /// <remarks> /// Computes the MD5 checksum of the MIME content in its canonical /// format and then base64-encodes the result. /// </remarks> /// <returns>The md5sum of the content.</returns> /// <exception cref="System.InvalidOperationException"> /// The <see cref="ContentObject"/> is <c>null</c>. /// </exception> public string ComputeContentMd5 () { if (ContentObject == null) throw new InvalidOperationException ("Cannot compute Md5 checksum without a ContentObject."); using (var stream = ContentObject.Open ()) { byte[] checksum; using (var filtered = new FilteredStream (stream)) { if (ContentType.Matches ("text", "*")) filtered.Add (new Unix2DosFilter ()); using (var md5 = MD5.Create ()) checksum = md5.ComputeHash (filtered); } var base64 = new Base64Encoder (true); var digest = new byte[base64.EstimateOutputLength (checksum.Length)]; int n = base64.Flush (checksum, 0, checksum.Length, digest); return Encoding.ASCII.GetString (digest, 0, n); } }