I am confused about the end marker at the end of signatures (in my case, individual sigs for a Tx that spends a P2SH) in pybitcointools:

pybitcointools: 304402204dae851c29a117383c5c535086a7fe899c9c5f0d927a4e680498fdd9b244cb15022058fea40a9f8c3988b17556fceacdce063860057fd8c6ad84de40515d287758dd01

Bitcore: 304402204dae851c29a117383c5c535086a7fe899c9c5f0d927a4e680498fdd9b244cb15022058fea40a9f8c3988b17556fceacdce063860057fd8c6ad84de40515d287758dd

These are two same signatures (i.e., same Tx, input, private key). Only, in pybitcointools' implementation, you have a 01 at the end. Why?

Does it perhaps have to do with the hashtype?



It is the hash type, in this case it is SIGHASH_ALL. To verify the digital signature inside of the Script language, it is required to have a hash type appended to the end of the digital signature. However if you verifying the signature using something like openssl, the bitcore signature would be valid.

  • thanks. Does it imply that using openssl to check the signature, we don't need to know about the hash type?
    – hartmut
    Aug 21 '16 at 8:30
  • 1
    @hartmut That's right. OpenSSL only checks the DER signature. Byte 2 of the DER is the signature length (i.e. No hashcode) Aug 21 '16 at 11:18
  • @WizardOfOzzie Ok thanks. If you have any link you can recommend for me to read on that please feel free to post them :).
    – hartmut
    Aug 21 '16 at 14:18

In bitcore-lib, the sighash type is added when building the input script (scriptSig) for the transaction, for example here: https://github.com/bitpay/bitcore-lib/blob/9e82395e71f8c1a9d4b1e4e4fc2b90085d5443d9/lib/script/script.js#L865-L886

As well as with the toTxFormat method: https://github.com/bitpay/bitcore-lib/blob/764aa6d4e9f28969192db2e8c1c82326cdbb6a6b/lib/crypto/signature.js#L300-L305


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.