def keyFromSignature(self, msg, signature): msgHash = self.hash256(msg) sigBin = base58.b58decode(signature) rp = ord(sigBin[:1]) - ord('0') vklist = VerifyingKey.from_public_key_recovery_with_digest( sigBin[1:], msgHash, curve=SECP256k1) return vklist[rp]
def sign(self, msg): msgHash = self.hash256(msg) sig = self.private.sign_digest(msgHash, k=162897322) vklist = VerifyingKey.from_public_key_recovery_with_digest( sig, msgHash, curve=SECP256k1) rp = None if self.address(vklist[0].to_string('compressed')) == self.address(): rp = '30' if self.address(vklist[1].to_string('compressed')) == self.address(): rp = '31' if rp: sig = rp + sig.encode('hex') return base58.b58encode(sig.decode('hex'))