diff --git a/crypto/identity/private_key.py b/crypto/identity/private_key.py index 893aca66..5e1956a3 100644 --- a/crypto/identity/private_key.py +++ b/crypto/identity/private_key.py @@ -7,11 +7,6 @@ from crypto.configuration.network import get_network from crypto.enums.constants import Constants -def keccak256(data: bytes) -> bytes: - """Keccak256 hash function""" - - return bytes.fromhex(keccak.new(data=data, digest_bits=256).hexdigest()) - class PrivateKey(object): def __init__(self, private_key: str): self.private_key = PvtKey.from_hex(private_key) @@ -26,20 +21,10 @@ def sign(self, message: bytes) -> bytes: Returns: bytes: signature of the signed message """ - signature = self.private_key.sign(message) - - return hexlify(signature) - - def sign_compact(self, message: bytes) -> bytes: - """Sign a message with this private key object - Args: - message (bytes): bytes data you want to sign + message_hash = bytes.fromhex(keccak.new(data=message, digest_bits=256).hexdigest()) - Returns: - bytes: signature of the signed message - """ - der = self.private_key.sign_recoverable(message, hasher=keccak256) + der = self.private_key.sign_recoverable(message_hash, hasher=None) return bytes([der[64] + Constants.ETHEREUM_RECOVERY_ID_OFFSET.value]) + der[0:64] diff --git a/crypto/transactions/signature.py b/crypto/transactions/signature.py deleted file mode 100644 index 106d0608..00000000 --- a/crypto/transactions/signature.py +++ /dev/null @@ -1,19 +0,0 @@ -from crypto.identity.private_key import PrivateKey -from btclib.ecc import ssa -from typing import Union - -class Signature: - @staticmethod - def verify(signature, message, publicKey: Union[bytes, str]): - # Remove leading byte ('02' / '03') from ECDSA key - if (len(publicKey) == 33): - publicKey = publicKey[1:] - - return ssa.verify(message, publicKey, signature) - - @staticmethod - def sign(message, privateKey: Union[bytes, PrivateKey]): - if isinstance(privateKey, PrivateKey): - privateKey = bytes.fromhex(privateKey.to_hex()) - - return ssa.sign(message, privateKey).serialize(False).hex() diff --git a/crypto/transactions/types/abstract_transaction.py b/crypto/transactions/types/abstract_transaction.py index 2a218f4a..5e26d354 100644 --- a/crypto/transactions/types/abstract_transaction.py +++ b/crypto/transactions/types/abstract_transaction.py @@ -29,7 +29,7 @@ def sign(self, private_key: PrivateKey): message = bytes.fromhex(transaction_hash) - transaction_signature = private_key.sign_compact(message) + transaction_signature = private_key.sign(message) self.data['v'] = transaction_signature[0] self.data['r'] = transaction_signature[1:33].hex() diff --git a/crypto/utils/message.py b/crypto/utils/message.py index 7862c667..665a1306 100644 --- a/crypto/utils/message.py +++ b/crypto/utils/message.py @@ -1,33 +1,35 @@ import json from binascii import unhexlify +from typing import Union + +from Cryptodome.Hash import keccak +from coincurve import PublicKey from crypto.identity.private_key import PrivateKey -from crypto.transactions.signature import Signature -from typing import Union class Message(object): public_key: bytes message: bytes signature: bytes - def __init__(self, public_key: bytes, message: bytes, signature: bytes): - if type(public_key) is bytes: - self.public_key = public_key - else: + def __init__(self, public_key: Union[bytes, str], message: Union[bytes, str], signature: Union[bytes, str]): + if isinstance(public_key, str): self.public_key = public_key.encode() - - if type(message) is bytes: - self.message = message else: - self.message = message.encode() + self.public_key = public_key - if type(signature) is bytes: - self.signature = signature + if isinstance(message, str): + self.message = message.encode() else: + self.message = message + + if isinstance(signature, str): self.signature = signature.encode() + else: + self.signature = signature @classmethod - def sign(cls, message: Union[bytes, str], passphrase: bytes): + def sign(cls, message: Union[bytes, str], passphrase: Union[bytes, str]): """Signs a message Args: @@ -38,13 +40,22 @@ def sign(cls, message: Union[bytes, str], passphrase: bytes): Message: returns a message object """ - if type(message) is str: + if isinstance(message, str): message = message.encode() + if not isinstance(passphrase, str): + passphrase = passphrase.hex() private_key = PrivateKey.from_passphrase(passphrase) public_key = private_key.public_key - signature = Signature.sign(message, private_key) + + transaction_signature = private_key.sign(message) + + signature_v = bytes([transaction_signature[0]]).hex() + signature_r = transaction_signature[1:33].hex() + signature_s = transaction_signature[33:].hex() + + signature = signature_r + signature_s + signature_v return cls( message=message, @@ -59,10 +70,18 @@ def verify(self): bool: returns a boolean - true if verified, false if not """ - public_key = unhexlify(self.public_key) signature = unhexlify(self.signature) + message_hash = keccak.new(data=self.message, digest_bits=256).digest() + + signature_r = signature[0:32] + signature_s = signature[32:64] + signature_v = signature[64] + + signature = signature_r + signature_s + bytes([signature_v - 27]) + + public_key = PublicKey.from_signature_and_message(signature, message_hash, hasher=None) - return Signature.verify(signature, self.message, public_key) + return public_key.format() == unhexlify(self.public_key) def to_dict(self): """Return a dictionary of the message diff --git a/tests/conftest.py b/tests/conftest.py index e3831b45..ac64cb49 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -236,14 +236,3 @@ def transaction_type_9(): 'serialized': 'ff011e0100000009000900000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300f902950000000000728c2c5d5f090e8c5dfd433bb2b15b30442cbafb9b882117f7b6f284da4093c6a96e8456f764628ec809514ac4e8b06d5450978b9b763f7d01f696b8881f702a' } return data - - -@pytest.fixture -def message(): - data = { - 'publicKey': '034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192', - 'signature': '22ff2371becb58439efdb95d116215f75bc41a380e1491605cc4874dd0d2c7d7958e4072da22fd307fe419c8864ba313a28bdb6fecbc6407839b6ba472395fe9', # noqa - 'message': 'Hello World', - 'passphrase': 'this is a top secret passphrase', - } - return data diff --git a/tests/fixtures/message-sign.json b/tests/fixtures/message-sign.json new file mode 100644 index 00000000..50bc350e --- /dev/null +++ b/tests/fixtures/message-sign.json @@ -0,0 +1,5 @@ +{ + "message": "Hello, world!", + "publicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d", + "signature": "0e2e53409be748834cac44052817ecef569b429a0492aa6bbc0d934eb71a09547e77aeef33d45669bbcba0498149f0e2b637fe8905186e08a5410c6f2b013bb41b" +} diff --git a/tests/fixtures/evm-sign.json b/tests/fixtures/transactions/evm-sign.json similarity index 100% rename from tests/fixtures/evm-sign.json rename to tests/fixtures/transactions/evm-sign.json diff --git a/tests/fixtures/multipayment-empty.json b/tests/fixtures/transactions/multipayment-empty.json similarity index 100% rename from tests/fixtures/multipayment-empty.json rename to tests/fixtures/transactions/multipayment-empty.json diff --git a/tests/fixtures/multipayment-single.json b/tests/fixtures/transactions/multipayment-single.json similarity index 100% rename from tests/fixtures/multipayment-single.json rename to tests/fixtures/transactions/multipayment-single.json diff --git a/tests/fixtures/multipayment.json b/tests/fixtures/transactions/multipayment.json similarity index 100% rename from tests/fixtures/multipayment.json rename to tests/fixtures/transactions/multipayment.json diff --git a/tests/fixtures/transfer-0.json b/tests/fixtures/transactions/transfer-0.json similarity index 100% rename from tests/fixtures/transfer-0.json rename to tests/fixtures/transactions/transfer-0.json diff --git a/tests/fixtures/transfer-large-amount.json b/tests/fixtures/transactions/transfer-large-amount.json similarity index 100% rename from tests/fixtures/transfer-large-amount.json rename to tests/fixtures/transactions/transfer-large-amount.json diff --git a/tests/fixtures/transfer.json b/tests/fixtures/transactions/transfer.json similarity index 100% rename from tests/fixtures/transfer.json rename to tests/fixtures/transactions/transfer.json diff --git a/tests/fixtures/unvote.json b/tests/fixtures/transactions/unvote.json similarity index 100% rename from tests/fixtures/unvote.json rename to tests/fixtures/transactions/unvote.json diff --git a/tests/fixtures/username-registration.json b/tests/fixtures/transactions/username-registration.json similarity index 100% rename from tests/fixtures/username-registration.json rename to tests/fixtures/transactions/username-registration.json diff --git a/tests/fixtures/username-resignation.json b/tests/fixtures/transactions/username-resignation.json similarity index 100% rename from tests/fixtures/username-resignation.json rename to tests/fixtures/transactions/username-resignation.json diff --git a/tests/fixtures/validator-registration.json b/tests/fixtures/transactions/validator-registration.json similarity index 100% rename from tests/fixtures/validator-registration.json rename to tests/fixtures/transactions/validator-registration.json diff --git a/tests/fixtures/validator-resignation.json b/tests/fixtures/transactions/validator-resignation.json similarity index 100% rename from tests/fixtures/validator-resignation.json rename to tests/fixtures/transactions/validator-resignation.json diff --git a/tests/fixtures/vote.json b/tests/fixtures/transactions/vote.json similarity index 100% rename from tests/fixtures/vote.json rename to tests/fixtures/transactions/vote.json diff --git a/tests/identity/test_private_key.py b/tests/identity/test_private_key.py index e7203e08..f983d461 100644 --- a/tests/identity/test_private_key.py +++ b/tests/identity/test_private_key.py @@ -15,7 +15,7 @@ def test_sign_compact(sign_compact): private_key = PrivateKey.from_passphrase(sign_compact['passphrase']) message = bytes.fromhex(sign_compact['data']['message']) - signature = private_key.sign_compact(message) + signature = private_key.sign(message) assert signature[0] == sign_compact['data']['v'] assert signature[1:33] == bytes.fromhex(sign_compact['data']['r']) diff --git a/tests/transactions/builder/test_evm_call_builder.py b/tests/transactions/builder/test_evm_call_builder.py index 581b8bd6..00304e26 100644 --- a/tests/transactions/builder/test_evm_call_builder.py +++ b/tests/transactions/builder/test_evm_call_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.evm_call_builder import EvmCallBuilder def test_evm_call_transaction(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('evm-sign') + fixture = load_transaction_fixture('transactions/evm-sign') builder = ( EvmCallBuilder diff --git a/tests/transactions/builder/test_multipayment_builder.py b/tests/transactions/builder/test_multipayment_builder.py index c100bd18..e5126e0a 100644 --- a/tests/transactions/builder/test_multipayment_builder.py +++ b/tests/transactions/builder/test_multipayment_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.multipayment_builder import MultipaymentBuilder def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('multipayment') + fixture = load_transaction_fixture('transactions/multipayment') builder = ( MultipaymentBuilder @@ -28,7 +28,7 @@ def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixtur assert builder.verify() def test_it_should_handle_single_recipient(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('multipayment-single') + fixture = load_transaction_fixture('transactions/multipayment-single') builder = ( MultipaymentBuilder @@ -54,7 +54,7 @@ def test_it_should_handle_single_recipient(passphrase, load_transaction_fixture) assert builder.verify() def test_it_should_handle_empty_payment(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('multipayment-empty') + fixture = load_transaction_fixture('transactions/multipayment-empty') builder = ( MultipaymentBuilder diff --git a/tests/transactions/builder/test_transfer_builder.py b/tests/transactions/builder/test_transfer_builder.py index 7537dd2e..27b178f5 100644 --- a/tests/transactions/builder/test_transfer_builder.py +++ b/tests/transactions/builder/test_transfer_builder.py @@ -2,7 +2,7 @@ from crypto.utils.unit_converter import UnitConverter def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('transfer') + fixture = load_transaction_fixture('transactions/transfer') builder = ( TransferBuilder diff --git a/tests/transactions/builder/test_unvote_builder.py b/tests/transactions/builder/test_unvote_builder.py index 00be6905..506b5d2e 100644 --- a/tests/transactions/builder/test_unvote_builder.py +++ b/tests/transactions/builder/test_unvote_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.unvote_builder import UnvoteBuilder def test_unvote_transaction(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('unvote') + fixture = load_transaction_fixture('transactions/unvote') builder = ( UnvoteBuilder @@ -29,7 +29,7 @@ def test_unvote_transaction(passphrase, load_transaction_fixture): assert builder.verify() def test_unvote_transaction_with_default_recipient_address(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('unvote') + fixture = load_transaction_fixture('transactions/unvote') builder = ( UnvoteBuilder diff --git a/tests/transactions/builder/test_username_registration_builder.py b/tests/transactions/builder/test_username_registration_builder.py index fadc50b0..dcfe2658 100644 --- a/tests/transactions/builder/test_username_registration_builder.py +++ b/tests/transactions/builder/test_username_registration_builder.py @@ -2,7 +2,7 @@ from crypto.transactions.builder.username_registration_builder import UsernameRegistrationBuilder def test_username_registration_transaction(passphrase, username, load_transaction_fixture): - fixture = load_transaction_fixture('username-registration') + fixture = load_transaction_fixture('transactions/username-registration') builder = ( UsernameRegistrationBuilder diff --git a/tests/transactions/builder/test_username_resignation_builder.py b/tests/transactions/builder/test_username_resignation_builder.py index bd336385..82c86cbf 100644 --- a/tests/transactions/builder/test_username_resignation_builder.py +++ b/tests/transactions/builder/test_username_resignation_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.username_resignation_builder import UsernameResignationBuilder def test_username_resignation_transaction(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('username-resignation') + fixture = load_transaction_fixture('transactions/username-resignation') builder = ( UsernameResignationBuilder diff --git a/tests/transactions/builder/test_validator_registration_builder.py b/tests/transactions/builder/test_validator_registration_builder.py index cbff0e9a..18a4479e 100644 --- a/tests/transactions/builder/test_validator_registration_builder.py +++ b/tests/transactions/builder/test_validator_registration_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.validator_registration_builder import ValidatorRegistrationBuilder def test_validator_registration_transaction(passphrase, validator_public_key, load_transaction_fixture): - fixture = load_transaction_fixture('validator-registration') + fixture = load_transaction_fixture('transactions/validator-registration') builder = ( ValidatorRegistrationBuilder @@ -31,7 +31,7 @@ def test_validator_registration_transaction(passphrase, validator_public_key, lo assert builder.verify() def test_validator_registration_transaction_with_default_recipient_address(passphrase, validator_public_key, load_transaction_fixture): - fixture = load_transaction_fixture('validator-registration') + fixture = load_transaction_fixture('transactions/validator-registration') builder = ( ValidatorRegistrationBuilder diff --git a/tests/transactions/builder/test_validator_resignation_builder.py b/tests/transactions/builder/test_validator_resignation_builder.py index 4975e4f9..5e5d6b67 100644 --- a/tests/transactions/builder/test_validator_resignation_builder.py +++ b/tests/transactions/builder/test_validator_resignation_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.validator_resignation_builder import ValidatorResignationBuilder def test_validator_resignation_transaction(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('validator-resignation') + fixture = load_transaction_fixture('transactions/validator-resignation') builder = ( ValidatorResignationBuilder @@ -29,7 +29,7 @@ def test_validator_resignation_transaction(passphrase, load_transaction_fixture) assert builder.verify() def test_validator_resignation_transaction_with_default_recipient_address(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('validator-resignation') + fixture = load_transaction_fixture('transactions/validator-resignation') builder = ( ValidatorResignationBuilder diff --git a/tests/transactions/builder/test_vote_builder.py b/tests/transactions/builder/test_vote_builder.py index 57a3006a..147f9e67 100644 --- a/tests/transactions/builder/test_vote_builder.py +++ b/tests/transactions/builder/test_vote_builder.py @@ -1,7 +1,7 @@ from crypto.transactions.builder.vote_builder import VoteBuilder def test_vote_transaction(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('vote') + fixture = load_transaction_fixture('transactions/vote') builder = ( VoteBuilder @@ -30,7 +30,7 @@ def test_vote_transaction(passphrase, load_transaction_fixture): assert builder.verify() def test_vote_transaction_with_default_recipient_address(passphrase, load_transaction_fixture): - fixture = load_transaction_fixture('vote') + fixture = load_transaction_fixture('transactions/vote') builder = ( VoteBuilder diff --git a/tests/transactions/test_deserializer.py b/tests/transactions/test_deserializer.py index ef732299..1b146221 100644 --- a/tests/transactions/test_deserializer.py +++ b/tests/transactions/test_deserializer.py @@ -18,14 +18,14 @@ def assert_deserialized(fixture, keys): return transaction def test_deserialize_transfer(load_transaction_fixture): - fixture = load_transaction_fixture('transfer') + fixture = load_transaction_fixture('transactions/transfer') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']) assert isinstance(transaction, Transfer) assert transaction.data['value'] == '100000000' def test_deserialize_vote(load_transaction_fixture): - fixture = load_transaction_fixture('vote') + fixture = load_transaction_fixture('transactions/vote') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, Vote) @@ -33,37 +33,37 @@ def test_deserialize_vote(load_transaction_fixture): assert transaction.data['id'] == fixture['data']['id'] def test_deserialize_unvote(load_transaction_fixture): - fixture = load_transaction_fixture('unvote') + fixture = load_transaction_fixture('transactions/unvote') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, Unvote) def test_deserialize_validator_registration(load_transaction_fixture): - fixture = load_transaction_fixture('validator-registration') + fixture = load_transaction_fixture('transactions/validator-registration') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, ValidatorRegistration) def test_deserialize_validator_resignation(load_transaction_fixture): - fixture = load_transaction_fixture('validator-resignation') + fixture = load_transaction_fixture('transactions/validator-resignation') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, ValidatorResignation) def test_deserialize_username_registration(load_transaction_fixture): - fixture = load_transaction_fixture('username-registration') + fixture = load_transaction_fixture('transactions/username-registration') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, UsernameRegistration) def test_deserialize_username_resignation(load_transaction_fixture): - fixture = load_transaction_fixture('username-resignation') + fixture = load_transaction_fixture('transactions/username-resignation') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'v', 'r', 's']) assert isinstance(transaction, UsernameResignation) def test_deserialize_multipayment(load_transaction_fixture): - fixture = load_transaction_fixture('multipayment') + fixture = load_transaction_fixture('transactions/multipayment') transaction = assert_deserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']) assert isinstance(transaction, Multipayment) diff --git a/tests/transactions/test_serializer.py b/tests/transactions/test_serializer.py index c355b111..229e4067 100644 --- a/tests/transactions/test_serializer.py +++ b/tests/transactions/test_serializer.py @@ -6,31 +6,31 @@ from crypto.transactions.types.validator_resignation import ValidatorResignation def test_transfer_serialization(load_transaction_fixture): - fixture = load_transaction_fixture('transfer') + fixture = load_transaction_fixture('transactions/transfer') transaction = Transfer(fixture['data']) serializer = Serializer.new(transaction) assert serializer.serialize().hex() == fixture['serialized'] def test_vote_serialization(load_transaction_fixture): - fixture = load_transaction_fixture('vote') + fixture = load_transaction_fixture('transactions/vote') transaction = Vote(fixture['data']) serializer = Serializer.new(transaction) assert serializer.serialize().hex() == fixture['serialized'] def test_unvote_serialization(load_transaction_fixture): - fixture = load_transaction_fixture('unvote') + fixture = load_transaction_fixture('transactions/unvote') transaction = Unvote(fixture['data']) serializer = Serializer.new(transaction) assert serializer.serialize().hex() == fixture['serialized'] def test_validator_registration_serialization(load_transaction_fixture): - fixture = load_transaction_fixture('validator-registration') + fixture = load_transaction_fixture('transactions/validator-registration') transaction = ValidatorRegistration(fixture['data']) serializer = Serializer.new(transaction) assert serializer.serialize().hex() == fixture['serialized'] def test_validator_resignation_serialization(load_transaction_fixture): - fixture = load_transaction_fixture('validator-resignation') + fixture = load_transaction_fixture('transactions/validator-resignation') transaction = ValidatorResignation(fixture['data']) serializer = Serializer.new(transaction) assert serializer.serialize().hex() == fixture['serialized'] diff --git a/tests/transactions/test_transaction.py b/tests/transactions/test_transaction.py index 87e9de24..129676a0 100644 --- a/tests/transactions/test_transaction.py +++ b/tests/transactions/test_transaction.py @@ -2,12 +2,12 @@ from crypto.transactions.deserializer import Deserializer def test_compute_id_of_transaction(load_transaction_fixture): - transaction = Deserializer.new(load_transaction_fixture('transfer')['serialized']).deserialize() + transaction = Deserializer.new(load_transaction_fixture('transactions/transfer')['serialized']).deserialize() assert len(transaction.get_id()) == 64 def test_sign_transaction_with_passphrase(load_transaction_fixture): private_key = PrivateKey.from_passphrase('this is a top secret passphrase') - transaction = Deserializer.new(load_transaction_fixture('transfer')['serialized']).deserialize() + transaction = Deserializer.new(load_transaction_fixture('transactions/transfer')['serialized']).deserialize() transaction.data['v'] = '' transaction.data['r'] = '' @@ -24,15 +24,15 @@ def test_sign_transaction_with_passphrase(load_transaction_fixture): assert transaction.data['s'] != '' def test_verify_transaction(load_transaction_fixture): - transaction = Deserializer.new(load_transaction_fixture('transfer')['serialized']).deserialize() + transaction = Deserializer.new(load_transaction_fixture('transactions/transfer')['serialized']).deserialize() assert transaction.verify() def test_transaction_to_array(load_transaction_fixture): - transaction = Deserializer.new(load_transaction_fixture('transfer')['serialized']).deserialize() + transaction = Deserializer.new(load_transaction_fixture('transactions/transfer')['serialized']).deserialize() actual = transaction.to_dict() assert isinstance(actual, dict) def test_transaction_to_json(load_transaction_fixture): - transaction = Deserializer.new(load_transaction_fixture('transfer')['serialized']).deserialize() + transaction = Deserializer.new(load_transaction_fixture('transactions/transfer')['serialized']).deserialize() actual = transaction.to_json() assert isinstance(actual, str) diff --git a/tests/utils/test_message.py b/tests/utils/test_message.py index 84b6dee5..2ffc6b37 100644 --- a/tests/utils/test_message.py +++ b/tests/utils/test_message.py @@ -2,47 +2,59 @@ from crypto.utils.message import Message -def test_verify_with_publicKey(message): +def test_verify_with_publicKey(load_transaction_fixture): + fixture = load_transaction_fixture('message-sign') + result = Message( - message=message['message'], - signature=message['signature'], - public_key=message['publicKey'], + message=fixture['message'], + signature=fixture['signature'], + public_key=fixture['publicKey'], ) isVerified = result.verify() assert isVerified is True -def test_message_sign_verification(message): - message: Message = Message.sign(message['message'], message['passphrase']) +def test_message_sign_verification(load_transaction_fixture, passphrase): + fixture = load_transaction_fixture('message-sign') + + message: Message = Message.sign(fixture['message'], passphrase) + + assert message.signature.decode() == fixture['signature'] + assert message.public_key.decode() == fixture['publicKey'] + assert message.message.decode() == fixture['message'] isVerified = message.verify() assert isVerified is True -def test_to_dict(message): +def test_to_dict(load_transaction_fixture): + fixture = load_transaction_fixture('message-sign') + result = Message( - message=message['message'], - signature=message['signature'], - public_key=message['publicKey'], + message=fixture['message'], + signature=fixture['signature'], + public_key=fixture['publicKey'], ) data = result.to_dict() - assert data['signature'] == message['signature'] - assert data['public_key'] == message['publicKey'] - assert data['message'] == message['message'] + assert data['signature'] == fixture['signature'] + assert data['public_key'] == fixture['publicKey'] + assert data['message'] == fixture['message'] + +def test_to_json(load_transaction_fixture): + fixture = load_transaction_fixture('message-sign') -def test_to_json(message): result = Message( - message=message['message'], - signature=message['signature'], - public_key=message['publicKey'], + message=fixture['message'], + signature=fixture['signature'], + public_key=fixture['publicKey'], ) json_data = result.to_json() data = json.loads(json_data) - assert data['signature'] == message['signature'] - assert data['public_key'] == message['publicKey'] - assert data['message'] == message['message'] + assert data['signature'] == fixture['signature'] + assert data['public_key'] == fixture['publicKey'] + assert data['message'] == fixture['message'] diff --git a/tests/utils/test_rpl_decoder.py b/tests/utils/test_rpl_decoder.py index 2dc000c1..979cf7a5 100644 --- a/tests/utils/test_rpl_decoder.py +++ b/tests/utils/test_rpl_decoder.py @@ -2,7 +2,7 @@ def test_decode_function_call(load_transaction_fixture): - fixture = load_transaction_fixture('transfer') + fixture = load_transaction_fixture('transactions/transfer') decoded_rlp = RlpDecoder.decode('0x' + fixture['serialized'][2:]) diff --git a/tests/utils/test_rpl_encoder.py b/tests/utils/test_rpl_encoder.py index ca73437f..d242d734 100644 --- a/tests/utils/test_rpl_encoder.py +++ b/tests/utils/test_rpl_encoder.py @@ -3,7 +3,7 @@ def test_encode_function_call(load_transaction_fixture): - fixture = load_transaction_fixture('transfer') + fixture = load_transaction_fixture('transactions/transfer') # Calls RlpEncoder.encode() with the given transaction transaction_hash = TransactionUtils.to_buffer(fixture['data'])