def ecdsa_sign(k: ecdsa.SigningKey, message: bytes) -> bytes: """ Generate an ECDSA signature of `message` under the signing key `k`. The hashing algorithm is SHA256. Outputs the strict DER canonical encoding of the signature (BIP66). """ return k.sign(message, hashfunc=hashlib.sha256, sigencode=ecdsa.util.sigencode_der_canonize)
def sign(self, signing_key: SigningKey) -> SignedTransaction: transaction_data = { "to_address": self.to_address, "amount": self.amount, "fee": self.fee, "nonce": self.nonce, } transaction_str = json.dumps(transaction_data).encode() transaction_hash = sha3_256(transaction_str).digest() verifying_key = signing_key.verifying_key signature = signing_key.sign(transaction_hash).hex() self.signed_transaction = { **transaction_data, "version": self.version, "signature": signature, "public_key": verifying_key.to_string("compressed").hex(), } return self.signed_transaction
def sign_message(private_key: ecdsa.SigningKey, message: str) -> str: """returns a signature for a given message""" signature = private_key.sign(bytes(message, "utf-8")) return str(binascii.hexlify(signature))[2:-1]
def sign(self, private_key: ecdsa.SigningKey): transaction_data = str(self.raw_transaction).encode() return private_key.sign(transaction_data)
def create_sign(self, sk: ecdsa.SigningKey): data = bytes(str(self.get_dict_wo_sign()), "utf-8") return sk.sign(data).hex()