def test_verify_multi_sig_works_for_invalid_signature(generator, message): sign_key1 = SignKey.new(None) ver_key1 = VerKey.new(generator, sign_key1) sign_key2 = SignKey.new(None) ver_key2 = VerKey.new(generator, SignKey.new(None)) signature1 = Bls.sign(message, sign_key1) signature2 = Bls.sign(message, sign_key2) multi_signature_invalid = MultiSignature.new([signature1, signature2]) valid = Bls.verify_multi_sig(multi_signature_invalid, message, [ver_key1, ver_key2], generator) assert not valid
def verify_sig(self, signature: str, message: bytes, bls_pk: Optional[VerKey]) -> bool: bls_signature = IndyCryptoBlsUtils.bls_from_str(signature, Signature) if bls_signature is None: return False if bls_pk is None: return False return Bls.verify(bls_signature, message, bls_pk, self._generator)
def verify_multi_sig(self, signature: str, message: bytes, pks: Sequence[Optional[VerKey]]) -> bool: # TODO: is it expected that we return False if one of the keys is None? if None in pks: return False multi_signature = \ IndyCryptoBlsUtils.bls_from_str(signature, MultiSignature) # type: MultiSignature if multi_signature is None: return False return Bls.verify_multi_sig(multi_sig=multi_signature, message=message, ver_keys=pks, gen=self._generator)
def signature2(message, sign_key2): signature = Bls.sign(message, sign_key2) assert type(signature) is Signature assert signature.c_instance is not None return signature
def sign(self, message: bytes) -> str: sign = Bls.sign(message, self._sk) return IndyCryptoBlsUtils.bls_to_str(sign)
def verify_key_proof_of_possession(self, key_proof: Optional[ProofOfPossession], bls_pk: Optional[VerKey]) -> bool: if None in [key_proof, bls_pk]: return False return Bls.verify_pop(key_proof, bls_pk, self._generator)
def test_verify__multi_sig_works(generator, message, multi_sig, ver_key1, ver_key2): valid = Bls.verify_multi_sig(multi_sig, message, [ver_key1, ver_key2], generator) assert valid
def test_verify_for_seed(generator, message, ver_key2, signature2): valid = Bls.verify(signature2, message, ver_key2, generator) assert valid
def test_verify_pop(generator, ver_key1, pop): valid = Bls.verify_pop(pop, ver_key1, generator) assert valid
def test_verify(generator, message, ver_key1, signature1): valid = Bls.verify(signature1, message, ver_key1, generator) assert valid