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