예제 #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)
예제 #2
0
def test1(bare_session):
    ml = makeTestMemberList(None)

    assert len(ml.members) == 26

    for m in ml.members:
        assert m.member_lists == [ml]

    non_existent_member=Member("nonexistmember",
                               makeTestKey("nonexist")[1])

    with pytest.raises(ValidationError):
        MemberList(
            members = ml.members,
            secretary = non_existent_member,
            president = ml.president,
            developer = ml.developer)

    with pytest.raises(ValidationError):
        MemberList(
            members = ml.members,
            secretary = ml.secretary,
            president = non_existent_member,
            developer = ml.developer)

    with pytest.raises(ValidationError):
        MemberList(
            members = ml.members,
            secretary = ml.secretary,
            president = ml.president,
            developer = non_existent_member)
예제 #3
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)
def postAction(client, astr, member, upload_data=None, upload_fn=None):
    """ Create dictionary for /action POST command. """
    privkey, address = makeTestKey(member)

    data = {}
    data["author_name"] = member
    data["action_string"] = (config.action_prefix +
                             ("%s " % current_member_list_hash(client)) + astr)
    data["signature"] = bitcoin.ecdsa_sign(data["action_string"], privkey)
    if upload_data is not None:
        data["upload"] = (BytesIO(upload_data), upload_fn)

    result = client.post(prefix + "action", data=data)
    rexpect(result, 201)
    return result
예제 #5
0
def test3(bare_session):
    ml = makeTestMemberList(None)

    assert len(ml.members) == 26

    Member.by_name("member_a").most_recent = False

    duplicate_member=Member("member_a",
                               makeTestKey("test1")[1])

    with pytest.raises(ValidationError):
        MemberList(
            members = ml.members+[duplicate_member],
            secretary = ml.secretary,
            president = ml.president,
            developer = ml.developer)
def cast_member_ballot(client, member, newmember, answer):
    """ Cast vote on new member. """
    privkey, address = makeTestKey(newmember)
    postAction(
        client, "cast-member-ballot name %s address %s by %s answer %s" %
        (newmember, address, member, answer), member)
def propose_member(client, votemaster, newmember):
    """ Propose a new member. """
    privkey, address = makeTestKey(newmember)
    postAction(
        client, "propose-member name %s address %s by %s" %
        (newmember, address, votemaster), votemaster)
예제 #8
0
def test_action1(client, app, raw_file):
    db.session.commit()  # make sure that raw_file exists
    data = {}
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 403

    # action_string missing
    data["author_name"] = "member_a"
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 403

    # sig missing
    data["action_string"] = "dummy"
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 403

    # invalid sig
    data["signature"] = "dummysig"
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 400

    # invalid author
    data["author_name"] = "nonexist"
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 403

    nm1addr = makeTestKey("newmember6")[1]
    newmember6 = Member("newmember6", nm1addr)

    ml = Global.current_member_list()

    action = makeTestAction(
        member_v(), "%s propose-member name %s address %s by member_v" %
        (ml.hashref(), newmember6.name, newmember6.address))

    # add upload
    data["upload"] = (BytesIO(b"dummy data"), "test.txt")
    data["author_name"] = "member_v"
    data["action_string"] = action.action_string
    data["signature"] = action.signature
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 400

    # add too-big upload
    data["upload"] = (BytesIO(b"x" * 2000000), "test.txt")
    data["author_name"] = "member_v"
    data["action_string"] = action.action_string
    data["signature"] = action.signature
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 413

    # add upload that exists already
    action_up = makeTestAction(
        member_v(), "%s proposal-upload file %s by member_v" %
        (ml.hashref(), sha256(b"test data")))

    data["upload"] = (BytesIO(b"test data"), "test.txt")
    data["author_name"] = "member_v"
    data["action_string"] = action_up.action_string
    data["signature"] = action_up.signature
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 409

    # finally, do everything right
    del data["upload"]
    data["author_name"] = "member_v"
    data["action_string"] = action.action_string
    data["signature"] = action.signature
    res = client.post(prefix + "action", data=data)
    assert res.status_code == 201