SECP256K1使用SawTooth Swift进行验证

镀银

我正在尝试使用SawTooth SDK来对Secp256k1密钥对进行签名/验证。当我尝试验证时,每个人似乎都期望结束:

let context = Secp256k1Context()

//PrivateKey init
let privateKey = Secp256k1PrivateKey.init(privKey: [0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0xf4,0x27,0x86,0xb5,0xdd,0x7b,0x76,0xba,0xea,0x42,0xa9,0xaa,0x60,0xff,0x4c,0x31,0x23,0xfa,0xf0,0x9b,0x8a])

//PublicKey init
let publicKey = Secp256k1PublicKey.init(pubKey: [0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x6c,0xd0,0x7b,0xd5,0xa3,0x85,0x6f,0x92,0xe7,0xbc,0x15,0xf3,0x40,0x8a,0xa5,0x4f,0x6c,0x3c,0x11,0x55,0x25,0x37,0x48,0xc9,0x93,0x0d,0x7a,0x18,0x4b,0x29,0x30,0xde,0xcd,0xbf,0xb3,0x94,0x4c,0x7f,0xdf,0xd2,0xda,0x51,0xcd,0x87,0xb5,0x00,0x8a,0x15,0xc5,0x16,0x1c,0x73,0xca])

let message_string = "hello"
let message_bytes: [UInt8] = Array(message_string.utf8)

let signer = Signer(context: context, privateKey: privateKey)

do {
    let signature = try signer.sign(data: message_bytes)
    let verif = try context.verify(signature: signature, data: message_bytes, publicKey: publicKey)
    print(verif)
}
catch {
    print("Verification failed..")
}

我总是收到“验证失败...”的提示。我知道我在做什么错吗?谢谢!

伍德斯托克

根据上面的讨论添加答案。

是的,您完全正确。

secp256r1 是一条曲线,定义为:

y^2 = x^3-3x+41058363725152142129326129780047268409114441015993725554835256314039467401291

这些常量来自NSA的朋友。

secp256k1 另一方面是由等式定义的曲线:

y^2 = x^3+0x+7

可能有关于一些交叉网xy同时满足的曲线方程,但是,关于上述的签名过程共ordindates,公共密钥不相对于签名上下文互换。

请记住,ECC中的私钥只是256-bit数字,但是每个曲线都有其自己定义的生成器点G,必须将其标量乘以私钥才能获得公钥(这只是曲线本身上的一个点)。

因此,您只需要将私钥定义为256-bit数字,然后将其乘以y^2 = x^3+0x+7曲线生成器点即可02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

顺便说一句,上面是查找公钥所需的原始数学sawtooth SDK,您可以使用方法从私钥派生公钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用secp256k1的OpenCL从私钥生成公钥

来自分类Dev

如何使用海绵城堡为比特币曲线(secp256k1)创建ECDSA密钥对(256bit)?

来自分类Dev

从十六进制DER返回二进制私钥secp256k1

来自分类Dev

为什么secp256k1私钥在nodejs中不总是32个字节?

来自分类Dev

Javascript。如何有效存储ECIES方案的Secp256k1私钥

来自分类Dev

Game Center无法使用Swift进行身份验证

来自分类Dev

使用Swift对GameKit本地玩家进行身份验证

来自分类Dev

在Swift中使用WKWebView进行身份验证

来自分类Dev

在Swift中使用WKWebView进行身份验证

来自分类Dev

如何在Swift中的iOS上使用FirebaseUI进行Google身份验证?

来自分类Dev

使用IClientModelValidator进行验证

来自分类Dev

使用if进行Rails验证

来自分类Dev

使用AngularJS进行验证

来自分类Dev

使用JavaScript进行验证

来自分类Dev

使用 Javascript 进行验证

来自分类Dev

如何使用OAuth1Swift对具有读写权限的Trello API用户进行身份验证

来自分类Dev

如何使用 rust-secp256k1 从私钥生成以太坊公钥?

来自分类Dev

使用OpenSSL进行签名验证

来自分类Dev

使用Sklearn进行交叉验证

来自分类Dev

使用angularjs进行表单验证

来自分类Dev

使用Argonaut进行Scalaz验证

来自分类Dev

使用MVC进行Bootstrap验证?

来自分类Dev

使用jQuery进行表单验证

来自分类Dev

使用Active Admin进行验证

来自分类Dev

使用循环进行输入验证

来自分类Dev

使用AngularJS进行异步验证

来自分类Dev

使用javascript进行最新验证

来自分类Dev

使用php进行表单验证

来自分类Dev

如何使用useEffect()进行验证