def validate(cls, message: Hash32, signature: BLSSignature, *public_keys: BLSPubkey) -> None: if len(public_keys) == 0: raise SignatureError("public_keys is empty") is_aggregate = len(public_keys) > 1 if cls.backend != NoOpBackend: validate_signature(signature) if is_aggregate: validate_many_public_keys(public_keys) else: validate_public_key(public_keys[0]) if is_aggregate: if not cls.fast_aggregate_verify(message, signature, *public_keys): raise SignatureError(f"backend {cls.backend.__name__}\n" f"message {message.hex()}\n" f"public_keys {public_keys}\n" f"signature {signature.hex()}") else: if not cls.verify(message, signature, public_keys[0]): raise SignatureError(f"backend {cls.backend.__name__}\n" f"message {message.hex()}\n" f"public_key {public_keys[0].hex()}\n" f"signature {signature.hex()}\n")
def validate_signature(signature: BLSSignature) -> None: if len(signature) != 96: raise SignatureError( f"Invalid signaute length, expect 96 got {len(signature)}. Signature: {signature}" ) if signature == EMPTY_SIGNATURE: raise SignatureError( f"Signature should not be empty. Signature: {signature}")
def validate(cls, message_hash: Hash32, pubkey: BLSPubkey, signature: BLSSignature, domain: Domain) -> None: if not cls.verify(message_hash, pubkey, signature, domain): raise SignatureError(f"backend {cls.backend.__name__}\n" f"message_hash {message_hash}\n" f"pubkey {pubkey}\n" f"signature {signature}\n" f"domain {domain}")
def validate_multiple(cls, pubkeys: Sequence[BLSPubkey], message_hashes: Sequence[Hash32], signature: BLSSignature, domain: Domain) -> None: if not cls.verify_multiple(pubkeys, message_hashes, signature, domain): raise SignatureError(f"backend {cls.backend.__name__}\n" f"pubkeys {pubkeys}\n" f"message_hashes {message_hashes}\n" f"signature {signature}\n" f"domain {domain}")
def validate_multiple( cls, pubkeys: Sequence[BLSPubkey], message_hashes: Sequence[Hash32], signature: BLSSignature, domain: Domain, ) -> None: if cls.backend != NoOpBackend: validate_signature(signature) validate_many_public_keys(pubkeys) if not cls.verify_multiple(pubkeys, message_hashes, signature, domain): raise SignatureError(f"backend {cls.backend.__name__}\n" f"pubkeys {pubkeys}\n" f"message_hashes {message_hashes}\n" f"signature {signature.hex()}\n" f"domain {domain.hex()}")
def validate( cls, message_hash: Hash32, pubkey: BLSPubkey, signature: BLSSignature, domain: Domain, ) -> None: if cls.backend != NoOpBackend: validate_signature(signature) validate_public_key(pubkey) if not cls.verify(message_hash, pubkey, signature, domain): raise SignatureError(f"backend {cls.backend.__name__}\n" f"message_hash {message_hash.hex()}\n" f"pubkey {pubkey.hex()}\n" f"signature {signature.hex()}\n" f"domain {domain.hex()}")