Example #1
0
def test_sig_bitcoin1(bare_session):
    msg = "this is a test message"

    name1, name2 = "member_a", "member_b"

    priv1, addr1 = makeTestKey(name1)
    priv2, addr2 = makeTestKey(name2)

    msg = b"this is a test message"
    sig1 = bitcoin.ecdsa_sign(msg, priv1)
    sig2 = bitcoin.ecdsa_sign(msg, priv2)

    with pytest.raises(ValidationError):
        # member not existing
        checkSig(msg, sig1, name1)

    m1 = Member(name1, addr1)
    m2 = Member(name2, addr2)
    bare_session.add(m1)
    bare_session.add(m2)

    # should succeed
    checkSig(msg, sig1, name1)

    with pytest.raises(ValidationError):
        # wrong sig
        checkSig(msg, sig2, name1)

    # should succeed
    checkSig(msg, sig2, name2)
def test1(bare_session):
    m = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign")
    bare_session.add(m)

    assert not m.eligible()
    Global.set_member_last_vote_time(m, time.time())

    # member is still not eligible - because no
    # current member list exists
    assert not m.eligible()

    assert not len(m.dependencies())

    assert len(m.member_lists) == 0

    with pytest.raises(ValidationError):
        Member(
            name="member_a ",  # illegal name
            address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign")

    with pytest.raises(ValidationError):
        Member(
            name="member_a",
            # Bitcoin address with broken checksum
            address="19L8fQDCta3mewpJXcRm8wqq6X6k6HFign")

    m2 = Member(name="member_b", address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV")
    bare_session.add(m2)

    # not allowed: reuse of address
    with pytest.raises(ValidationError):
        m3 = Member(name="member_a",
                    address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV")
def test_duplicate_name(bare_session):
    m1 = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign")

    bare_session.add(m1)

    with pytest.raises(ValidationError):
        m2 = Member(name="member_a",
                    address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV")
def test_with_pgpkey(bare_session):
    with pytest.raises(ValidationError):
        m = Member(name="member_a",
                   address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign",
                   pgp_pubkey="test")

    m = Member(name="member_a",
               address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign",
               pgp_pubkey=testkeys.pubkey1.decode("ascii"))

    bare_session.add(m)
def test_invalid_publish(bare_session):
    test_scenario1(bare_session, stopper="two-unpublished")
    ml = Global.current_member_list()

    proposal1 = b"Test proposal #1"
    hashprop1 = hashlib.sha256(proposal1).hexdigest()

    hashprop_noexist = hashlib.sha256(b"nope").hexdigest()

    rf = RawFile.by_hash(hashprop1)
    m1 = rf.proposal_metadata

    # test hash does not exist
    with pytest.raises(ValidationError):
        act_publish = makeTestAction(
            author=Member.by_name("member_v"),
            apart=
            (ml.hashref() +
             " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v"
             % hashprop_noexist))
        act_publish.apply(None, None)

    rf_nomd = RawFile(b"nope")
    bare_session.add(rf_nomd)

    # test file has no metadata
    with pytest.raises(ValidationError):
        act_publish = makeTestAction(
            author=Member.by_name("member_v"),
            apart=
            (ml.hashref() +
             " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v"
             % hashprop_noexist))
        act_publish.apply(None, None)

    # test file is already public
    m1.file_public = True

    with pytest.raises(ValidationError):
        act_publish = makeTestAction(
            author=Member.by_name("member_v"),
            apart=
            (ml.hashref() +
             " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v"
             % hashprop1))
        act_publish.apply(None, None)
def test_rawfile1(bare_session):
    rf=RawFile(b"123")
    bare_session.add(rf)

    assert not rf.public()
    assert rf.serialize() == b"123"

    H=hashlib.sha256(b"123").hexdigest()

    assert rf.hashref() == H

    with pytest.raises(ValidationError):
        rf2 = RawFile(b"123")

    with pytest.raises(Exception):
        rf.toJ()

    assert not len(rf.dependencies())
Example #7
0
def test_sig_pgp1(gpg_env1, bare_session):
    env = gpg_env1
    gpg = env["gpg"]

    name1, name2 = "member_a", "member_b"

    priv1, addr1 = makeTestKey(name1)
    priv2, addr2 = makeTestKey(name2)

    m1 = Member(name1, addr1, env["pk1"])
    m2 = Member(name2, addr2, env["pk2"])
    bare_session.add(m1)
    bare_session.add(m2)

    msg = b"this is a test message"

    s1 = gpg.sign(msg,
                  keyid=env["key1"].fingerprint,
                  passphrase="key1",
                  detach=True)
    sig1 = s1.data

    s2 = gpg.sign(msg,
                  keyid=env["key2"].fingerprint,
                  passphrase="key2",
                  detach=True)
    sig2 = s2.data

    # signing should have succeeded (non-zero sig length)
    assert len(sig1) and b"SIGNATURE" in sig1
    assert len(sig2) and b"SIGNATURE" in sig1

    # should suceed
    checkSig(msg, sig1, name1)
    checkSig(msg, sig2, name2)

    with pytest.raises(ValidationError):
        # wrong user
        checkSig(msg, sig2, name1)