首页 > 解决方案 > Bouncycastle 问题使用给定的公钥验证给定的 ECC 签名

问题描述

我正在使用 Bouncycastle 的 C# Xamarin.iOS/Mono.Android 端口,我正在尝试使用我在 iOS/Android 设备上本地拥有的给定公钥验证具有 secp256r1 曲线的 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 文档和/或示例,或者接下来要检查的内容。任何人都有经验等方面的想法?谢谢!

标签: c#.netxamarincryptographybouncycastle

解决方案


推荐阅读