import ecdsa from hashlib import sha256, sha512 class Verifier: def verify_rfc6979(self, public_key: bytes, message: bytes, signature: bytes) -> bool: """ Verify a signature using the public key. :param public_key: Public key in byte format. :param message: Signature verification message in byte format. :param signature: Signature in byte format. :return: True if the signature is correct, otherwise False. :raises: ValueError: If the public_key key is incorrect. """ if len(public_key) == 0 or public_key is None: raise ValueError(f"Incorrect public key: {public_key}") if message is None or signature is None: return False vk = ecdsa.VerifyingKey.from_string(public_key, curve=ecdsa.NIST256p, hashfunc=sha256) try: return vk.verify(signature, message) except ecdsa.BadSignatureError: return False def verify(self, public_key: bytes, message: bytes, signature: bytes) -> bool: """ Verify a signature using the public key. :param public_key: Public key in byte format. :param message: Signature verification message in byte format. :param signature: Signature in byte format. :return: True if the signature is correct, otherwise False. :raises: ValueError: If the public_key key is incorrect. """ if len(public_key) == 0 or public_key is None: raise ValueError(f"Incorrect public key: {public_key}") if message is None or signature is None: return False vk = ecdsa.VerifyingKey.from_string(public_key, curve=ecdsa.NIST256p, hashfunc=sha512) try: return vk.verify(signature, message) except ecdsa.BadSignatureError: return False