Пример #1
0
    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")
Пример #2
0
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}")
Пример #3
0
 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}")
Пример #4
0
 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}")
Пример #5
0
    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()}")
Пример #6
0
    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()}")