c# - 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 文档和/或示例,或者接下来要检查的内容。任何人都有经验等方面的想法?谢谢!
解决方案
推荐阅读
- url - URL Rewrite 两种不同的场景
- c# - g.Graphics.drawstring() 在 C# 中从右到左对齐
- javascript - 使用 JavaScript ES6 迭代器转换数组
- gcc - 在 Clang/LLVM x86-64 内联汇编中,我怎么说我破坏了 x87/媒体状态?
- algorithm - 使用嵌套哈希表解决这个练习问题是否有效?
- c# - 自定义 C# .Net 标准项目模板以仅限制 c# 文件
- hdl - AHDL dff 重置为其默认值
- angular - 输入类型=“数字”不能以角度形式工作
- r - 附加到文件夹中的文件名
- unity3d - DEP6953:无法启动远程调试器