Hi, I'm looking for something equivalent with System.Security.Cryptography.RSACryptoServiceProvider.SignHash method in BC? I've a very big problem with signing a hash in BC vs. .NET. Calculating the hash works for both BC and .NET and returns the same value but the signatures are different.
// Sign hash in BC. private static byte[] bcSign(AsymmetricKeyParameter privateKey, byte[] data, string hashAlgorithm) { // Compute the hash. IDigest bcDigest = DigestUtilities.GetDigest(hashAlgorithm); bcDigest.BlockUpdate(data, 0, data.Length); byte[] bcHashBytes = DigestUtilities.DoFinal(bcDigest); // Sign the hash. var signer = SignerUtilities.GetSigner("RSA"); signer.Init(true, privateKey); signer.BlockUpdate(bcHashBytes, 0, bcHashBytes.Length); var bcSignatureBytes = signer.GenerateSignature(); // Return the signature. return bcSignatureBytes; } // Sign hash in .NET. private static byte[] msSign(AsymmetricKeyParameter privateKey, byte[] data, string hashAlgorithm) { // Convert the Bouncy Castle private key to Microsoft .NET CSP. RsaPrivateCrtKeyParameters bcKeyParameters = ((RsaPrivateCrtKeyParameters)privateKey); var msRsa = DotNetUtilities.ToRSAParameters(bcKeyParameters); RSACryptoServiceProvider msCsp = new RSACryptoServiceProvider(); msCsp.ImportParameters(msRsa); // Compute the hash. SHA1Managed msDigest = new SHA1Managed(); msDigest.ComputeHash(data); byte[] msHashBytes = msDigest.Hash; // Sign the hash. byte[] msSignatureBytes = msCsp.SignHash(msHashBytes, hashAlgorithm); // Return the signature. return msSignatureBytes; } The returned signature of msSign: F2LhCYWGOHtqLtiwacQ3Z/cMZZYUliTOUPVqREQGzQbOcOyZ60oiRvLnz3dPQfTDsliJvrEdcBOTPOPRabUIVoEoAHbR9wJHH57g6qRsrf8aem6vG2uInCoRjb1zCeQmCvm2NYhvHwgIYcIOw+W13R30HMFnYxL0rqALmDAhSW99C5T+enV5Y0xqsnV+4203jelf06d0auXe9o+OwTQy8c2xLShLuaGqzQgfNlTtmKGDC9iXSlDdtSeN5fdqpMpYJqS/KXCW7Ci2lS4X22Pa3IuEYBVd4637FKFnCaHIXKlXBfgyfOgfYR/P1oJNqdJ/WsDvSavqGqKz5CWPBCmphQ== The returned signature of bcSign: prDVbcwSCtoPgbP0bs8PfODekfQBtv+e7AqzAJ0JLOM9gY70qfEiPWYwGJEGV4Pk2q0ypJ5ROL+NwOuyyOmA8PJW73lJFg54JaEtCnSe06/vXxIorA6jKjAL70I2Mikfpt7OMboTlSFkw0YxGOZ0o3tWEUdgwPMqURuArkEx6p/p4H6z6n4RPPPO0XRbBlKKRMDkmZp0xkLes3GX+pKN2/iP6Tjh0E+VTaid+wiw3sK/Ke2MdVsWkv93vUHCgEaHhIgZd/eKxtSFGiO4RJIMDyVUktxuxIz5JnFMT1X9huXEvzjUuVV+Ra9IQhQoG++Q1/U2F1McnyMRURq7+jWCYw== I can verify the both signatures with System.Security.Cryptography.RSACryptoServiceProvider.VerifyHash but verifying the msSign (.NET) signature with SignerUtilities.GetSigner("RSA") (BC) will fail. How can the signatures be different in these cases and how can I solve this problem?! Thanks a lot. Regards, Jonas