gpt4 book ai didi

ios - ECDSA secp256k1 key 对在 Swift 上签名

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:57 30 4
gpt4 key购买 nike

在这里,我通过一些虚拟 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com