def sign(data: object, private_key: str) -> str: """ signs a message @param message: (object) message to sign @param private_key: (str) private key to sign with """ private_key_bytes = serialization.load_pem_private_key( bytes.fromhex(private_key), password=None, backend=default_backend() ) data_bytes = Helper.object_to_bytes(data) signature = private_key_bytes.sign(data_bytes, ec.ECDSA(hashes.SHA256())) return signature.hex()
def verify(data: object, signature: str, public_key: str) -> bool: """ verfies message with digital signature @param message: (object) message to verify @param signature: (str) signature to verify message with @param public_key: (str) public key to verify message with """ try: public_key_bytes = serialization.load_pem_public_key( bytes.fromhex(public_key), backend=default_backend() ) signature_bytes = bytes.fromhex(signature) data_bytes = Helper.object_to_bytes(data) public_key_bytes.verify(signature_bytes, data_bytes, ec.ECDSA(hashes.SHA256())) return True except InvalidSignature: return False
def hash_transaction(self) -> str: context = self.get_transaction_data() context.update({'signature': self.get_signature()}) return Helper.hash_data(Helper.object_to_bytes(context))