Search code examples
c#signdsa

DSACryptoServiceProvider: VerifySignature vs. SignData


I'm trying to use the DSACryproServiceProvider. But im a bit confused, because I can't see the Difference between

a) dsa.VerifySignature()

b) dsa.VerifyData()

Additionaly I expect that dsa.CreateSignature() just creates the signature for the given data while dsa.SignData() returns the signed data. Is this correct?

Thanks for your replies.


Solution

  • The difference is that CreateSignature expects a hashed value. It doesn't perform hashing, and similarly, VerifySignature expects a hashed value to verify. This can be used if you want a custom hash, for example.

    SignData and VerifyData perform hashing on the data buffer. The hash itself is SHA1, quoting:

    DSA uses the SHA1 hash algorithm.

    DSACryptoServiceProvider is a bit old though, and if you can, you should use RSACryptoServiceProvider, quoting from MSDN:

    Newer asymmetric algorithms are available. Consider using the RSACryptoServiceProvider class instead of the DSACryptoServiceProvider class. Use DSACryptoServiceProvider only for compatibility with legacy applications and data.