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): 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)
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
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)
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