(Re-written question, please see history for original).
The question is right there in the title.
Why is there no managed MD5 implementation in the .NET framework?
I'm specifically talking about a purely managed code implementation of the MD5 algorithm, which does not exist within the .NET framework.
Within the System.Security.Cryptography namespace, I am aware of the MD5 abstract base class (which has to be inherited and can't be used as is), and I'm also aware of MD5CryptoServiceProvider and MD5CNG which both provide implementations from the OS's underlying CSP (Crypto Service Provider) and CNG (Cryptography Next Generation) providers respectively, however, both of these implementations are unmanaged code.
UPDATE ON ANSWERS:
I appreciate that, whilst there should be "one true answer" to this question, we (the SO community) may not know it unless a Microsoft framework designer (or someone who knows one directly) is part of this community, however, many people have offered very reasonable "educated guesses" as to the thinking that went into omitting a managed MD5 implementation from the framework, however, I'm still curious to know if anyone does know the "real" answer to this question.
Array.Copy
is also unmanaged, but it doesn't bother anyone, and doesn't have any real consequences for the clients. What would change if you had a managed MD5 provider in the framework? – Pavel Minaev