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

Reply via email to