我的主要目标是生成仅提供两个输入的签名:
signHash('aea0dadad42f18df8d340222d0f806b350d287075a2d5bba542bd0299157ba9a', '5KJnx9SacpzY5CoKYYCmX6bHiqnSSXtjnvNzztYNWVdZNMyb2yM')
//output: SIG_K1_K1rdJKaiaQDVvXhGh9gypMS4HLuoHEqKPGcFm6Hu9sVQJJffxfnhmEpNVe3hy3sznzPQUuyfKcfkUxJYULzGvCTQVHYnWj
这个确切的功能已经在这个库中作为一个 npm 模块实现,但我需要在 python 中使用它。
我试图找到这个功能的一个端口,但没有运气。
之后,我尝试使用 python 中提供的签名工具。
我当前的代码:
from beemgraphenebase.account import PasswordKey
import ecdsa
from binascii import hexlify, unhexlify
import base58
msg = 'aea0dadad42f18df8d340222d0f806b350d287075a2d5bba542bd0299157ba9a'
password_key = PasswordKey('testing@gmx.ch', '12345678', role='owner').get_private_key()
// password_key == '5KJnx9SacpzY5CoKYYCmX6bHiqnSSXtjnvNzztYNWVdZNMyb2yM'
secret = unhexlify(repr(password_key))
sk = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1)
signature = sk.sign_digest_deterministic(unhexlify(msg))
print(base58.b58encode(signature))
#output: 7zaVJGX2c9RYu796AQ6kXzyX8XdNufAYcxgpFfKReYWpk5joRmWRxPEeZLW13dgYNhzqUNeS6n9F3efn2snSq17
由于 js 库总是提供相同的结果,我假设签名必须几乎相同。
我对密码学和签名数据非常陌生,所以我可能遗漏了一些非常关键的东西并且无法弄清楚。
我最后的手段是使用某种胶带并在 python 中使用那个 js 库,但谁真的想去那里。