CNG stands for "Cryptography API: Next Generation"
CNG is the replacement for CryptoAPI under Windows Vista (and later) and
just like CryptoAPI it is a Windows-specific, native (unmanaged) library.
In MS implementation the *Cng classes are simply managed wrappers around
the native CNG libraries. This is similar to older *CryptoServiceProvider
classes that provided managed wrappers around CryptoAPI.
In Mono implementation the *Cng classes are, mostly[1], wrappers around
existing managed classes provided in older version of the framework.
This is essentially similar to what Mono already does for the
*CryptoServiceProvider classes (i.e. provide managed implementation).
Of couse this won't affect people using the base algorithm classes to
create the default instance of their algorithm.
E.g.
SHA256 hash = SHA256.Create ();
has been working for years and will continue to do so.
New CNG crypto classes Wrapper around
---------------------- --------------
ECDsaCng none [1]
ECDiffieHellmanCng none [1]
MD5Cng MD5CryptoServiceProvider [mscorlib]
SHA1Cng SHA1Managed [mscorlib]
SHA256Cng SHA256Managed [mscorlib]
SHA384Cng SHA384Managed [mscorlib]
SHA512Cng SHA512Managed [mscorlib]
[1] Two specific cases, namely ECDH and ECDSA, are new algorithms that
were not available before CNG and for which Mono does not, at the
present time, have managed alternatives.
The *actual* behavior of both class is to throw a PlatformException
just like running the same code would do under Windows XP (or earlier).
Once we have managed implementations for both algorithms we'll behave
like Vista.