pip install bip66This library is a migration of https://github.com/bitcoinjs/bip66 to python
See bip66.
- This module works only with two's complement numbers.
- BIP66 doesn't check that
rorsare fully valid.check/decodedoesn't check thatrorsgreat than 33 bytes or that this number represent valid point on elliptic curve.encodedoesn't check thatr/srepresent valid point on elliptic curve.
import binascii import bip66 r = "29db2d5f4e1dcc04e19266cce3cb135865784c62ab653b307f0e0bb744f5c2aa" s = "00a97f5826912cac8b44d9f577a26f169a2f8db781f2ddb7de2bc886e93b6844" encoded = bip66.encode(binascii.unhexlify(r), binascii.unhexlify(s)) signature = binascii.hexlify(encoded).decode() # > 3044022029db2d5f4e1dcc04e19266cce3cb135865784c62ab653b307f0e0bb744f5c2aa022000a97f5826912cac8b44d9f577a26f169a2f8db781f2ddb7de2bc886e93b6844 DER = "3044022029db2d5f4e1dcc04e19266cce3cb135865784c62ab653b307f0e0bb" \ "744f5c2aa022000a97f5826912cac8b44d9f577a26f169a2f8db781f2ddb7de2bc886e93b6844" r, s = bip66.decode(binascii.unhexlify(DER)) print(binascii.hexlify(r).decode()) print(binascii.hexlify(s).decode()) # > 29db2d5f4e1dcc04e19266cce3cb135865784c62ab653b307f0e0bb744f5c2aa # > 00a97f5826912cac8b44d9f577a26f169a2f8db781f2ddb7de2bc886e93b6844A catch-all exception regex:
/Expected DER (integer|sequence)|(R|S) value (excessively padded|is negative)|(R|S|DER sequence) length is (zero|too short|too long|invalid)/