Bouncycastle问题使用给定的公钥验证给定的ECC签名

时间:2018-07-03 15:45:58

标签: c# .net xamarin cryptography bouncycastle

我正在使用Bouncycastle的C#Xamarin.iOS / Mono.Android端口,并且尝试使用secp256r1曲线和我在iOS / Android设备上本地拥有的给定公钥来验证ECC签名。

签名生成是在具有单独私钥的远程设备上完成的,并通过BLE链接将其发送给我。收到后,我尝试使用以下代码进行验证。

myLocalPublicKey和'signatureFromDevice'是byte[]并在其他位置设置

bool verify(byte[] signatureFromDevice)
{
   bool status = false;
   X9ECParameters curve = SecNamedCurves.GetByName("secp256r1");

  string caString = Utilities.ByteArrayToString(myLocalPublicKey).Replace(" ", "");
  Console.WriteLine("------ CA PUBLIC KEY " + Utilities.ByteArrayToString(myLocalPublicKey));

  ECDomainParameters curveSpec = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());

  byte[] hex = Hex.Decode("04" + caString);
  Org.BouncyCastle.Math.EC.ECPoint q = curve.Curve.DecodePoint(hex);

  ECPublicKeyParameters publicKeyParameters = new ECPublicKeyParameters(q, curveSpec);

  var signer = SignerUtilities.GetSigner("SHA-256withECDSA"); 
  signer.Init(false, publicKeyParameters); 
  signer.BlockUpdate (message, 0, message.Length);

  Console.WriteLine("------ SIGNATURE TO BE VERIFIED " +    Utilities.ByteArrayToString(signatureFromDevice));

 status = signer.VerifySignature(signatureFromDevice) // returns false
 return status;
}
  

但是在运行时,verifySignature()总是返回false

但是,由于ECPublicKeyParameters,ECPoint和ECurve似乎都在正常实例化,因此我尚未在线找到该场景的任何API文档和/或示例或下一步要检查的内容。有人从经验等中有任何想法吗?谢谢!

0 个答案:

没有答案