Example #1
0
    def run_with(
        _cls, inputs: SequenceOfBLSSignature, _config: Optional[Eth2Config]
    ) -> BLSSignature:
        # BLS override
        bls.use(MilagroBackend)

        return bls.aggregate(*inputs)
Example #2
0
def test_validate_multiple(backend):
    bls.use(backend)
    msg = b"\x32" * 32
    privkey_0 = 42
    privkey_1 = 4242
    pubkey_0 = bls.sk_to_pk(privkey_0)
    pubkey_1 = bls.sk_to_pk(privkey_1)
    aggregate_sig = bls.aggregate(bls.sign(privkey_0, msg), bls.sign(privkey_1, msg))
    bls.validate(msg, aggregate_sig, pubkey_0, pubkey_1)
Example #3
0
def test_validate_multiple_one_invalid(backend):
    bls.use(backend)
    msg = b"\x32" * 32
    privkey_0 = 42
    privkey_1 = 4242
    privkey_other = 424242
    pubkey_0 = bls.sk_to_pk(privkey_0)
    pubkey_1 = bls.sk_to_pk(privkey_1)
    aggregate_sig = bls.aggregate(
        bls.sign(privkey_0, msg), bls.sign(privkey_other, msg)
    )
    with pytest.raises(SignatureError):
        bls.validate(msg, aggregate_sig, pubkey_0, pubkey_1)
def _correct_indexed_attestation_params(validator_count, attestation, params,
                                        privkeys, state, config):
    valid_params = copy.deepcopy(params)

    (attesting_indices,
     signatures) = _get_indices_and_signatures(validator_count, state, config,
                                               attestation, privkeys)

    valid_params["attesting_indices"] = attesting_indices

    signature = bls.aggregate(*signatures)

    valid_params["signature"] = signature

    return valid_params
Example #5
0
def aggregate_votes(
    bitfield: Bitfield,
    sigs: Sequence[BLSSignature],
    voting_sigs: Sequence[BLSSignature],
    attesting_indices: Sequence[CommitteeValidatorIndex],
) -> Tuple[Bitfield, BLSSignature]:
    """
    Aggregate the votes.
    """
    # Update the bitfield and append the signatures
    sigs = tuple(sigs) + tuple(voting_sigs)
    bitfield = pipe(
        bitfield,
        *(set_voted(index=committee_index)
          for committee_index in attesting_indices),
    )

    return bitfield, bls.aggregate(*sigs)
Example #6
0
def get_aggregate_from_valid_committee_attestations(
    attestations: Sequence[Attestation]
) -> Attestation:
    """
    Return the aggregate attestation.

    The given attestations SHOULD have the same `data: AttestationData` and are valid.
    """
    signatures = [attestation.signature for attestation in attestations]
    aggregate_signature = bls.aggregate(*signatures)

    all_aggregation_bits = [
        attestation.aggregation_bits for attestation in attestations
    ]
    aggregation_bits = tuple(map(any, zip(*all_aggregation_bits)))

    assert len(attestations) > 0

    return Attestation.create(
        data=attestations[0].data,
        aggregation_bits=Bitfield(aggregation_bits),
        signature=aggregate_signature,
    )