I assume that computing a md5 hash is a pure deterministic function, and hence I assume it should be safe to use a single C# MD5CryptoServiceProvider instance to compute hashed in multithreaded code, because I assume that the md5 computation would be implemented as a pure function.
I do not know the details of the implementation but I am surprised that it implements IDisposable, as I do not understand what kind of cleanup is required from something which I assume is implemented as a pure function.
So am I right in assuming that it is safe to call MD5CryptoServiceProvider.ComputeHash on a single instance of MD5CryptoServiceProvider in multithreaded code ?