From 7275e6f44b0208f97c953201812b837a44720380 Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Fri, 14 Oct 2016 17:48:45 +0200 Subject: [PATCH 1/2] Added support for cryptoconditions 0.5.0 Fixed tests. --- bigchaindb/core.py | 2 +- bigchaindb/models.py | 9 +++++---- bigchaindb/util.py | 2 +- setup.py | 4 ++-- tests/db/test_bigchain_api.py | 2 +- tests/pipelines/test_vote.py | 31 ++++++++++++++++++++----------- tests/test_models.py | 4 ++-- 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/bigchaindb/core.py b/bigchaindb/core.py index 805a6d16..36b91b3e 100644 --- a/bigchaindb/core.py +++ b/bigchaindb/core.py @@ -616,7 +616,7 @@ class Bigchain(object): } vote_data = serialize(vote) - signature = crypto.SigningKey(self.me_private).sign(vote_data) + signature = crypto.SigningKey(self.me_private).sign(vote_data.encode()) vote_signed = { 'node_pubkey': self.me, diff --git a/bigchaindb/models.py b/bigchaindb/models.py index 342d6443..7ed81061 100644 --- a/bigchaindb/models.py +++ b/bigchaindb/models.py @@ -185,12 +185,13 @@ class Block(object): block_body = self.to_dict() block_serialized = serialize(block_body['block']) signing_key = SigningKey(signing_key) - self.signature = signing_key.sign(block_serialized) + self.signature = signing_key.sign(block_serialized.encode()).decode() return self def is_signature_valid(self): block = self.to_dict()['block'] - block_serialized = serialize(block) + # cc only accepts bytesting messages + block_serialized = serialize(block).encode() verifying_key = VerifyingKey(block['node_pubkey']) try: # NOTE: CC throws a `ValueError` on some wrong signatures @@ -218,8 +219,8 @@ class Block(object): # NOTE: CC throws a `ValueError` on some wrong signatures # https://github.com/bigchaindb/cryptoconditions/issues/27 try: - signature_valid = verifying_key.verify(block_serialized, - signature) + signature_valid = verifying_key\ + .verify(block_serialized.encode(), signature) except ValueError: signature_valid = False if signature_valid is False: diff --git a/bigchaindb/util.py b/bigchaindb/util.py index 007d8f7e..d8fb13e3 100644 --- a/bigchaindb/util.py +++ b/bigchaindb/util.py @@ -137,7 +137,7 @@ def verify_vote_signature(voters, signed_vote): return False public_key = crypto.VerifyingKey(vk_base58) - return public_key.verify(serialize(signed_vote['vote']), signature) + return public_key.verify(serialize(signed_vote['vote']).encode(), signature) def is_genesis_block(block): diff --git a/setup.py b/setup.py index 16258344..a1ddc586 100644 --- a/setup.py +++ b/setup.py @@ -93,7 +93,7 @@ setup( 'rethinkdb~=2.3', 'pysha3==0.3', 'pytz==2015.7', - 'cryptoconditions==0.4.1', + 'cryptoconditions==0.5.0', 'statsd==3.2.1', 'python-rapidjson==0.0.6', 'logstats==0.2.1', @@ -103,7 +103,7 @@ setup( 'requests~=2.9', 'gunicorn~=19.0', 'multipipes~=0.1.0', - 'bigchaindb-common>=0.0.4', + 'bigchaindb-common>=0.0.6', ], setup_requires=['pytest-runner'], tests_require=tests_require, diff --git a/tests/db/test_bigchain_api.py b/tests/db/test_bigchain_api.py index d056cbfe..bad58324 100644 --- a/tests/db/test_bigchain_api.py +++ b/tests/db/test_bigchain_api.py @@ -47,7 +47,7 @@ class TestBigchainApi(object): vote = b.vote(block1.id, b.get_last_voted_block().id, True) vote['vote']['previous_block'] = block1.id vote_data = serialize(vote['vote']) - vote['signature'] = SigningKey(b.me_private).sign(vote_data) + vote['signature'] = SigningKey(b.me_private).sign(vote_data.encode()) b.write_vote(vote) with pytest.raises(CyclicBlockchainError): diff --git a/tests/pipelines/test_vote.py b/tests/pipelines/test_vote.py index 09811b0d..aea9cee4 100644 --- a/tests/pipelines/test_vote.py +++ b/tests/pipelines/test_vote.py @@ -33,7 +33,7 @@ def test_vote_creation_valid(b): assert vote['vote']['is_block_valid'] is True assert vote['vote']['invalid_reason'] is None assert vote['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(serialize(vote['vote']), + assert crypto.VerifyingKey(b.me).verify(serialize(vote['vote']).encode(), vote['signature']) is True @@ -52,7 +52,7 @@ def test_vote_creation_invalid(b): assert vote['vote']['is_block_valid'] is False assert vote['vote']['invalid_reason'] is None assert vote['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(serialize(vote['vote']), + assert crypto.VerifyingKey(b.me).verify(serialize(vote['vote']).encode(), vote['signature']) is True @@ -176,8 +176,9 @@ def test_valid_block_voting_sequential(b, monkeypatch): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -210,8 +211,9 @@ def test_valid_block_voting_multiprocessing(b, monkeypatch): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -251,8 +253,9 @@ def test_valid_block_voting_with_create_transaction(b, monkeypatch): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -305,8 +308,9 @@ def test_valid_block_voting_with_transfer_transactions(monkeypatch, b): 'invalid_reason': None, 'timestamp': '2'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True vote2_rs = r.table('votes').get_all([block2.id, b.me], @@ -319,8 +323,9 @@ def test_valid_block_voting_with_transfer_transactions(monkeypatch, b): 'invalid_reason': None, 'timestamp': '2'} + serialized_vote2 = util.serialize(vote2_doc['vote']).encode() assert vote2_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote2_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote2, vote2_doc['signature']) is True @@ -356,8 +361,9 @@ def test_unsigned_tx_in_block_voting(monkeypatch, b, user_vk): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -395,8 +401,9 @@ def test_invalid_id_tx_in_block_voting(monkeypatch, b, user_vk): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -434,8 +441,9 @@ def test_invalid_content_in_tx_in_block_voting(monkeypatch, b, user_vk): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True @@ -469,8 +477,9 @@ def test_invalid_block_voting(monkeypatch, b, user_vk): 'invalid_reason': None, 'timestamp': '1'} + serialized_vote = util.serialize(vote_doc['vote']).encode() assert vote_doc['node_pubkey'] == b.me - assert crypto.VerifyingKey(b.me).verify(util.serialize(vote_doc['vote']), + assert crypto.VerifyingKey(b.me).verify(serialized_vote, vote_doc['signature']) is True diff --git a/tests/test_models.py b/tests/test_models.py index 7160d9a1..faef5353 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -155,11 +155,11 @@ class TestBlockModel(object): 'node_pubkey': b.me, 'voters': voters, } - expected_block_serialized = serialize(expected_block) + expected_block_serialized = serialize(expected_block).encode() expected = SigningKey(b.me_private).sign(expected_block_serialized) block = Block(transactions, b.me, timestamp, voters) block = block.sign(b.me_private) - assert block.signature == expected + assert block.signature == expected.decode() verifying_key = VerifyingKey(b.me) assert verifying_key.verify(expected_block_serialized, block.signature) From b813021a441cd6a63637a064a9d8c17b248c72fc Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Mon, 17 Oct 2016 13:37:58 +0200 Subject: [PATCH 2/2] replace minimum version with version matching --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a1ddc586..13c13e93 100644 --- a/setup.py +++ b/setup.py @@ -103,7 +103,7 @@ setup( 'requests~=2.9', 'gunicorn~=19.0', 'multipipes~=0.1.0', - 'bigchaindb-common>=0.0.6', + 'bigchaindb-common==0.0.6', ], setup_requires=['pytest-runner'], tests_require=tests_require,