Search code examples
pythoncryptographydigital-signatureecdsa

Python edcsa SECP256k1 is not signing correctly


I use https://github.com/warner/python-ecdsa library for create private key and public key.

I generated that keys

private key = 'ffbd2d76fde8d62642379e507f4ab69883e094708410392d8470246146195e56'
public key = '04' + '615a523e41d5984d5afc18e5adddddfa0ab8ac63b49933ff1b07fae90604fa6cdd6572996117b3ffce6e1258668c88fc2aad3c45eab31ef8a57b5176c91b272a'

Signed data

message = 'aaa'
signHex = privateKey.sign(message,hashfunc=hashlib.sha256).encode("hex")
# signHex : afe2f94df735d1d0c571c9c10dbd3e9271ad1dd4e6c5d523901324c01a4de25e5b9825f8de3fffeebd477f575c83997998df32e8b0a7053b5a43813f269bd4ee

when I check the sign with my keys in js online tool it says your sign is invalid. I also generated sign with same keys and checked java sign in this tool it said it is valid sign. Why online tool says invalid sign for python ecdsa sign. What is problem with python for sign?

Online Tool : https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html


Solution

  • I solved problem. I added sigencode=sigencode_der parameter and it worked correctly.

    The correct sign code :

    from ecdsa import SigningKey, VerifyingKey, SECP256k1
    from ecdsa.util import sigencode_der
    
    message = 'aaa'
    signHex = privateKey.sign(message,hashfunc=hashlib.sha256,sigencode=sigencode_der).encode("hex")
    # signHex = 3044022072ae5b5cf026796ee8217df26eb70f3dd72016f87af0a5fd8d6a99faf51e77f802206a77d3a3acc9540721f34e776b8feb7e2ea69e321d25872d3d65b7fd15c8132d