ios - ECDSA secp256k1 key 对在 Swift 上签名

标签 ios swift cryptography ecdsa

在这里,我通过一些虚拟 prvData 创建了私钥,然后创建了 2 个虚拟数据对象并尝试签署 data1 和 data2 对象

NSData *prvData = [NSData hexStringToData:@"e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35"];

NSData *data1 = [NSData hexStringToData:@"0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2"];
NSData *data2 = [NSData hexStringToData:@"0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c20339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2"];


NSData *sig1 = [CKSecp256k1 compactSignData:data1 withPrivateKey:prvData];
NSData *sig2 = [CKSecp256k1 compactSignData:data2 withPrivateKey:prvData];

此处,sig1 和 sign2 对象值相同,但这不应该发生。所以如果有人做过这个签名问题,请告诉我,怎么做?

最佳答案

这些函数直接调用非托管 (C) 代码。输入值被认为与 key 大小相同:256 位或 32 字节。如果您提供的数量多于此数量,那么只会采用前 32 个字节。原因很简单:数据只是使用单个指针发送,没有指定长度

所以基本上这段代码只有在您向它发送 32 字节的哈希值时才有效。我认为您只能对 256 位散列或小于 256 位的散列进行这项工作。对于较大的哈希值,您可能必须对曲线的阶数执行模块化缩减。可以使用最多 32 个字节的零来左填充较小的散列以使其工作(ECDSA 是大端)。

您可能已经注意到在对 CKSecp256k1 的调用中缺少散列机制。如果你看一下代码,它肯定不会在内部执行它,即使输入被称为“消息”。看起来这是专门用于比特币的低级 API。

关于ios - ECDSA secp256k1 key 对在 Swift 上签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873672/

相关文章:

ios - 使用Auto Layout的iAd ADBannerView有多种外观

ios - 链接器命令失败,退出代码为 1(使用 -v 查看)

ios - FW 和 TW 的自定义登录

ios - 具有自定义颜色的 UIColor 扩展是真实的吗?

c# - .NET 中 RSA key 指数有限制吗?

java - RSA key key 静态生成

ios - 重置 [PHPhotoLibrary 授权状态]

ios - 使用 Swift 在输出流上发送字节

整个应用程序中的 IOS 可达性以及仅在 View 加载时的可达性

javascript - CryptoJS AES 无法解密