コード例 #1
0
def pre_prepare_incorrect(state_root, request):
    if request.param == 'state_root':
        params = create_pre_prepare_params(state_root=generate_state_root())
    elif request.param == 'ledger_id':
        params = create_pre_prepare_params(state_root=state_root,
                                           ledger_id=DOMAIN_LEDGER_ID)
    elif request.param == 'timestamp':
        params = create_pre_prepare_params(state_root=state_root,
                                           timestamp=get_utc_epoch() + 1000)
    elif request.param == 'txn_root':
        params = create_pre_prepare_params(state_root=state_root,
                                           txn_root=generate_state_root())
    return PrePrepare(*params)
コード例 #2
0
def pre_prepare_with_bls_pool_ledger(multi_signature):
    params = create_pre_prepare_params(
        state_root=multi_signature.value.state_root_hash,
        pool_state_root=multi_signature.value.pool_state_root_hash,
        bls_multi_sig=multi_signature,
        ledger_id=POOL_LEDGER_ID)
    return PrePrepare(*params)
コード例 #3
0
def test_process_pre_prepare_with_incorrect_audit_txn_root(
        replica_with_requests, state_roots, txn_roots, multi_sig,
        fake_requests):
    def reportSuspiciousNodeEx(ex):
        assert Suspicions.PPR_AUDIT_TXN_ROOT_HASH_WRONG.code == ex.code
        raise ex

    replica_with_requests.node.reportSuspiciousNodeEx = reportSuspiciousNodeEx

    pre_prepare_params = create_pre_prepare_params(
        state_root=state_roots[DOMAIN_LEDGER_ID],
        ledger_id=DOMAIN_LEDGER_ID,
        txn_root=txn_roots[DOMAIN_LEDGER_ID],
        bls_multi_sig=multi_sig,
        view_no=replica_with_requests.viewNo,
        inst_id=replica_with_requests.instId,
        pool_state_root=state_roots[POOL_LEDGER_ID],
        # INVALID!
        audit_txn_root="HSai3sMHKeAva4gWMabDrm1yNhezvPHfXnGyHf2ex1L4",
        reqs=fake_requests)
    pre_prepare = PrePrepare(*pre_prepare_params)

    with pytest.raises(SuspiciousNode):
        replica_with_requests.processPrePrepare(
            pre_prepare, replica_with_requests.primaryName)
コード例 #4
0
def test_process_pre_prepare_with_incorrect_audit_txn_root(
        orderer_with_requests, state_roots, txn_roots, multi_sig,
        fake_requests):
    expect_suspicious(orderer_with_requests,
                      Suspicions.PPR_AUDIT_TXN_ROOT_HASH_WRONG.code)

    pre_prepare_params = create_pre_prepare_params(
        state_root=state_roots[DOMAIN_LEDGER_ID],
        ledger_id=DOMAIN_LEDGER_ID,
        txn_root=txn_roots[DOMAIN_LEDGER_ID],
        bls_multi_sig=multi_sig,
        view_no=orderer_with_requests.view_no,
        inst_id=0,
        pool_state_root=state_roots[POOL_LEDGER_ID],
        # INVALID!
        audit_txn_root="HSai3sMHKeAva4gWMabDrm1yNhezvPHfXnGyHf2ex1L4",
        reqs=fake_requests,
        pp_seq_no=1)
    pre_prepare = PrePrepare(*pre_prepare_params)
    _register_pp_ts(orderer_with_requests, pre_prepare,
                    orderer_with_requests.primary_name)

    with pytest.raises(SuspiciousNode):
        orderer_with_requests.process_preprepare(
            pre_prepare, orderer_with_requests.primary_name)
コード例 #5
0
def fake_pre_prepare_with_bls(fake_multi_sig, ledger_id):
    params = create_pre_prepare_params(
        state_root=fake_multi_sig.value.state_root_hash,
        ledger_id=ledger_id,
        pool_state_root=fake_multi_sig.value.pool_state_root_hash,
        bls_multi_sig=fake_multi_sig)
    return PrePrepare(*params)
コード例 #6
0
def test_update_pre_prepare_first_time(bls_bft_replicas, state_root,
                                       ledger_id):
    params = create_pre_prepare_params(state_root, ledger_id=ledger_id)
    params_initial = copy(params)
    for bls_bft_replica in bls_bft_replicas:
        params = bls_bft_replica.update_pre_prepare(params, ledger_id)
        assert params == params_initial
コード例 #7
0
def test_process_pre_prepare_with_incorrect_audit_txn_root(orderer_with_requests,
                                                           state_roots, txn_roots, multi_sig, fake_requests):
    if not orderer_with_requests.is_master:
        return
    handler = Mock()
    orderer_with_requests._bus.subscribe(RaisedSuspicion, handler)
    pre_prepare_params = create_pre_prepare_params(state_root=state_roots[DOMAIN_LEDGER_ID],
                                                   ledger_id=DOMAIN_LEDGER_ID,
                                                   txn_root=txn_roots[DOMAIN_LEDGER_ID],
                                                   bls_multi_sig=multi_sig,
                                                   view_no=orderer_with_requests.view_no,
                                                   inst_id=0,
                                                   pool_state_root=state_roots[POOL_LEDGER_ID],
                                                   # INVALID!
                                                   audit_txn_root="HSai3sMHKeAva4gWMabDrm1yNhezvPHfXnGyHf2ex1L4",
                                                   reqs=fake_requests,
                                                   pp_seq_no=1)
    pre_prepare = PrePrepare(*pre_prepare_params)
    _register_pp_ts(orderer_with_requests, pre_prepare, orderer_with_requests.primary_name)

    orderer_with_requests.process_preprepare(pre_prepare, orderer_with_requests.primary_name)
    check_suspicious(handler, RaisedSuspicion(inst_id=orderer_with_requests._data.inst_id,
                                              ex=SuspiciousNode(orderer_with_requests.primary_name,
                                                                Suspicions.PPR_AUDIT_TXN_ROOT_HASH_WRONG,
                                                                pre_prepare)))
コード例 #8
0
def pre_prepare_with_bls(multi_signature, ledger_id):
    params = create_pre_prepare_params(
        state_root=multi_signature.value.state_root_hash,
        ledger_id=ledger_id,
        pool_state_root=multi_signature.value.pool_state_root_hash,
        bls_multi_sig=multi_signature)
    return PrePrepare(*params)
コード例 #9
0
def pre_prepare(checkpoint_service):
    params = create_pre_prepare_params(None,
                                       ledger_id=DOMAIN_LEDGER_ID,
                                       view_no=checkpoint_service.view_no,
                                       pp_seq_no=1)
    pp = PrePrepare(*params)
    return pp
コード例 #10
0
def fake_pre_prepare_with_bls_pool_ledger(fake_multi_sig):
    params = create_pre_prepare_params(
        state_root=fake_multi_sig.value.state_root_hash,
        pool_state_root=fake_multi_sig.value.pool_state_root_hash,
        bls_multi_sig=fake_multi_sig,
        ledger_id=POOL_LEDGER_ID)
    return PrePrepare(*params)
コード例 #11
0
def test_suspicious_on_wrong_list_of_primaries(orderer_with_requests,
                                               state_roots, txn_roots, multi_sig, fake_requests):
    if not orderer_with_requests.is_master:
        return
    handler = Mock()
    orderer_with_requests._bus.subscribe(RaisedSuspicion, handler)
    pre_prepare_params = create_pre_prepare_params(state_root=state_roots[DOMAIN_LEDGER_ID],
                                                   ledger_id=DOMAIN_LEDGER_ID,
                                                   txn_root=txn_roots[DOMAIN_LEDGER_ID],
                                                   bls_multi_sig=multi_sig,
                                                   view_no=orderer_with_requests.view_no,
                                                   inst_id=0,
                                                   pool_state_root=state_roots[POOL_LEDGER_ID],
                                                   audit_txn_root=state_roots[AUDIT_LEDGER_ID],
                                                   reqs=fake_requests,
                                                   pp_seq_no=1,
                                                   primaries=["Some", "Other", "Primaries"])
    pre_prepare = PrePrepare(*pre_prepare_params)
    _register_pp_ts(orderer_with_requests, pre_prepare, orderer_with_requests.primary_name)

    orderer_with_requests.process_preprepare(pre_prepare, orderer_with_requests.primary_name)
    check_suspicious(handler, RaisedSuspicion(inst_id=orderer_with_requests._data.inst_id,
                                              ex=SuspiciousNode(orderer_with_requests.primary_name,
                                                                Suspicions.PPR_WITH_WRONG_PRIMARIES,
                                                                pre_prepare)))
コード例 #12
0
def pre_prepare_with_incorrect_bls(multi_signature):
    multi_signature.signature = base58.b58encode(
        b"somefakesignaturesomefakesignaturesomefakesignature").decode("utf-8")
    params = create_pre_prepare_params(
        state_root=multi_signature.value.state_root_hash,
        pool_state_root=multi_signature.value.pool_state_root_hash,
        bls_multi_sig=multi_signature)
    return PrePrepare(*params)
コード例 #13
0
def pre_prepare(replica, pool_state_root, fake_state_root_hash, fake_multi_sig,
                request):
    params = create_pre_prepare_params(state_root=fake_state_root_hash,
                                       view_no=replica.viewNo,
                                       pool_state_root=pool_state_root)
    pp = PrePrepare(*params)
    if request.param:
        setattr(pre_prepare, f.BLS_MULTI_SIG.nm, fake_multi_sig)

    return pp
コード例 #14
0
def test_update_pre_prepare_after_ordered(bls_bft_replicas, state_root,
                                          fake_multi_sig):
    for bls_bft_replica in bls_bft_replicas:
        bls_bft_replica._bls_latest_multi_sig = fake_multi_sig

    params = create_pre_prepare_params(state_root)

    params_initial = copy(params)
    for bls_bft_replica in bls_bft_replicas:
        params = bls_bft_replica.update_pre_prepare(params, DOMAIN_LEDGER_ID)
        assert params != params_initial
コード例 #15
0
def test_update_pre_prepare_after_ordered(bls_bft_replicas, state_root,
                                          fake_multi_sig, ledger_id):
    for bls_bft_replica in bls_bft_replicas:
        bls_bft_replica._bls_latest_multi_sig = fake_multi_sig

    params = create_pre_prepare_params(state_root, ledger_id=ledger_id)

    params_initial = copy(params)
    for bls_bft_replica in bls_bft_replicas:
        params = bls_bft_replica.update_pre_prepare(params, ledger_id)
        assert params != params_initial
コード例 #16
0
ファイル: conftest.py プロジェクト: jsferrer1/indy-plenum
def pre_prepare(replica, state_roots, txn_roots, multi_sig, fake_requests):
    params = create_pre_prepare_params(state_root=state_roots[DOMAIN_LEDGER_ID],
                                       ledger_id=DOMAIN_LEDGER_ID,
                                       txn_root=txn_roots[DOMAIN_LEDGER_ID],
                                       bls_multi_sig=multi_sig,
                                       view_no=replica.viewNo,
                                       inst_id=replica.instId,
                                       pool_state_root=state_roots[POOL_LEDGER_ID],
                                       audit_txn_root=txn_roots[AUDIT_LEDGER_ID],
                                       reqs=fake_requests)
    pp = PrePrepare(*params)
    return pp
コード例 #17
0
def test_validate_commit_signature_without_pool_state_root(
        bls_bft_replicas, multi_signature):
    key = (0, 0)
    params = create_pre_prepare_params(
        state_root=multi_signature.value.state_root_hash)
    pre_prepare = PrePrepare(*params)
    setattr(pre_prepare, f.BLS_MULTI_SIG.nm, multi_signature)
    for sender_bls_bft in bls_bft_replicas:
        commit = create_commit_bls_sig(sender_bls_bft, key, pre_prepare)
        for verifier_bls_bft in bls_bft_replicas:
            assert verifier_bls_bft.validate_commit(
                commit, sender_bls_bft.node_id, pre_prepare) is None
コード例 #18
0
def _pre_prepare(orderer, state_roots, txn_roots, multi_sig, fake_requests):
    params = create_pre_prepare_params(state_root=state_roots[DOMAIN_LEDGER_ID],
                                       ledger_id=DOMAIN_LEDGER_ID,
                                       txn_root=txn_roots[DOMAIN_LEDGER_ID],
                                       bls_multi_sig=multi_sig,
                                       view_no=orderer.view_no,
                                       inst_id=0,
                                       pool_state_root=state_roots[POOL_LEDGER_ID],
                                       audit_txn_root=txn_roots[AUDIT_LEDGER_ID],
                                       reqs=fake_requests,
                                       pp_seq_no=1)
    pp = PrePrepare(*params)
    return pp
コード例 #19
0
def test_rolling_release_for_bls_fixes(bls_bft_replicas, nodes_updated,
                                       quorums, multi_signature,
                                       pre_prepare_with_bls, ledger_id,
                                       state_root):
    key = (0, 0)
    for i in range(len(bls_bft_replicas)):
        commit = create_commit_bls_sig(bls_bft_replicas[i], (0, 0),
                                       pre_prepare_with_bls)
        if i < nodes_updated:
            assert commit.blsSigs is not None
            assert len(commit.blsSigs.items()) == 2
        for verifier_bls_bft in bls_bft_replicas:
            status = verifier_bls_bft.validate_commit(
                commit, bls_bft_replicas[i].node_id, pre_prepare_with_bls)
            assert status != BlsBftReplica.CM_BLS_SIG_WRONG
            verifier_bls_bft.process_commit(commit,
                                            bls_bft_replicas[i].node_id)
    for bls_bft in bls_bft_replicas:
        bls_bft.process_order(key, quorums, pre_prepare_with_bls)

    params = create_pre_prepare_params(state_root, ledger_id=ledger_id)
    params_initial = copy(params)
    for i in range(len(bls_bft_replicas)):
        params_res = bls_bft_replicas[i].update_pre_prepare(
            copy(params), ledger_id)
        assert params_res != params_initial
        if i < nodes_updated:
            assert len(params_res) - len(params_initial) == 2

        pre_prepare = PrePrepare(*params_res)
        if quorums.bls_signatures.is_reached(
                nodes_updated) and i < nodes_updated:
            assert len(pre_prepare.blsMultiSigs) == 2
        for verifier_bls_bft in bls_bft_replicas:
            status = verifier_bls_bft.validate_pre_prepare(
                pre_prepare, bls_bft_replicas[i].node_id)
            assert status != BlsBftReplica.PPR_BLS_MULTISIG_WRONG
            verifier_bls_bft.process_pre_prepare(pre_prepare,
                                                 bls_bft_replicas[i].node_id)

    for i in range(len(bls_bft_replicas)):
        if quorums.bls_signatures.is_reached(
                nodes_updated) and i < nodes_updated:
            assert bls_bft_replicas[i]._bls_bft.bls_store.get(
                multi_signature.value.state_root_hash)
            assert bls_bft_replicas[i]._bls_bft.bls_store.get(
                "2UQ3Da54cQ6SamunzXVAtBozFnkACELBH7HzbRPgfKzm")
        else:
            assert bls_bft_replicas[i]._bls_bft.bls_store.get(
                multi_signature.value.state_root_hash)
コード例 #20
0
def test_update_pre_prepare_after_ordered_with_multiple_sigs(
        bls_bft_replicas, state_root, fake_multi_sig, ledger_id,
        create_audit_txn_with_multiple_ledgers):
    for bls_bft_replica in bls_bft_replicas:
        bls_bft_replica._bls_latest_multi_sig = fake_multi_sig
        bls_bft_replica._all_bls_latest_multi_sigs = [fake_multi_sig]

    params = create_pre_prepare_params(state_root, ledger_id=ledger_id)

    params_initial = copy(params)
    for bls_bft_replica in bls_bft_replicas:
        params_res = bls_bft_replica.update_pre_prepare(
            copy(params), ledger_id)
        assert params_res != params_initial
        assert len(params_res) - len(params_initial) == 2
コード例 #21
0
def test_process_pre_prepare_with_incorrect_pool_state_root(
        replica_with_requests, state_roots, txn_roots, multi_sig,
        fake_requests):
    expect_suspicious(replica_with_requests,
                      Suspicions.PPR_POOL_STATE_ROOT_HASH_WRONG.code)

    pre_prepare_params = create_pre_prepare_params(
        state_root=state_roots[DOMAIN_LEDGER_ID],
        ledger_id=DOMAIN_LEDGER_ID,
        txn_root=txn_roots[DOMAIN_LEDGER_ID],
        bls_multi_sig=multi_sig,
        view_no=replica_with_requests.viewNo,
        inst_id=replica_with_requests.instId,
        # INVALID!
        pool_state_root="HSai3sMHKeAva4gWMabDrm1yNhezvPHfXnGyHf2ex1L4",
        audit_txn_root=txn_roots[AUDIT_LEDGER_ID],
        reqs=fake_requests)
    pre_prepare = PrePrepare(*pre_prepare_params)

    with pytest.raises(SuspiciousNode):
        replica_with_requests.processPrePrepare(
            pre_prepare, replica_with_requests.primaryName)
コード例 #22
0
 def fake_pp(ledger_id=DOMAIN_LEDGER_ID):
     params = create_pre_prepare_params(state_root=generate_state_root(),
                                        ledger_id=ledger_id)
     return PrePrepare(*params)
コード例 #23
0
def test_update_pre_prepare_first_time(bls_bft_replicas, state_root):
    params = create_pre_prepare_params(state_root)
    params_initial = copy(params)
    for bls_bft_replica in bls_bft_replicas:
        params = bls_bft_replica.update_pre_prepare(params, DOMAIN_LEDGER_ID)
        assert params == params_initial
コード例 #24
0
def pre_prepare_no_bls(state_root, pool_state_root, ledger_id):
    params = create_pre_prepare_params(state_root=state_root,
                                       ledger_id=ledger_id,
                                       pool_state_root=pool_state_root)
    return PrePrepare(*params)