Skip to content

Commit f6a26ec

Browse files
Highjhackerfaustbrian
authored andcommitted
fix: messages now can work with both publickey and publicKey (#66)
1 parent b9abd6c commit f6a26ec

File tree

4 files changed

+45
-24
lines changed

4 files changed

+45
-24
lines changed

crypto/transactions/transaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def verify(self):
181181
will happen.
182182
"""
183183
transaction = self.to_bytes()
184-
message = Message(transaction, self.signature, self.senderPublicKey)
184+
message = Message(message=transaction, signature=self.signature, publickey=self.senderPublicKey)
185185
is_valid = message.verify()
186186
if not is_valid:
187187
raise ArkInvalidTransaction('Transaction could not be verified')

crypto/utils/message.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77

88
class Message(object):
9-
10-
def __init__(self, message, signature, public_key):
11-
self.public_key = public_key
12-
self.signature = signature
13-
self.message = message
9+
def __init__(self, **kwargs):
10+
for k in kwargs.keys():
11+
if k in ['message', 'signature', 'publickey', 'publicKey']:
12+
self.__setattr__(k, kwargs[k])
13+
else:
14+
raise TypeError('Invalid keyword argument %s' % k)
1415

1516
@classmethod
1617
def sign(cls, message, passphrase):
@@ -23,11 +24,11 @@ def sign(cls, message, passphrase):
2324
Returns:
2425
Message: returns a message object
2526
"""
26-
message_byes = message if isinstance(message, bytes) else message.encode()
27+
message_bytes = message if isinstance(message, bytes) else message.encode()
2728
passphrase = passphrase.decode() if isinstance(passphrase, bytes) else passphrase
2829
private_key = PrivateKey.from_passphrase(passphrase)
29-
signature = private_key.sign(message_byes)
30-
return cls(message, signature, private_key.public_key)
30+
signature = private_key.sign(message_bytes)
31+
return cls(message=message, signature=signature, publicKey=private_key.public_key)
3132

3233
def verify(self):
3334
"""Verify the Message object
@@ -36,7 +37,7 @@ def verify(self):
3637
bool: returns a boolean - true if verified, false if not
3738
"""
3839
message = self.message if isinstance(self.message, bytes) else self.message.encode()
39-
key = PublicKey.from_hex(self.public_key)
40+
key = PublicKey.from_hex(self.publickey) if hasattr(self, 'publickey') else PublicKey.from_hex(self.publicKey)
4041
signature = unhexlify(self.signature)
4142
is_verified = key.public_key.verify(signature, message)
4243
return is_verified
@@ -48,7 +49,7 @@ def to_dict(self):
4849
dict: dictionary consiting of public_key, signature and message
4950
"""
5051
data = {
51-
'public_key': self.public_key,
52+
('publicKey' if hasattr(self, 'publicKey') else 'publickey'): (self.publicKey if hasattr(self, 'publicKey') else self.publickey),
5253
'signature': self.signature,
5354
'message': self.message,
5455
}

tests/conftest.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,17 @@ def transaction_type_8():
179179
@pytest.fixture
180180
def message():
181181
data = {
182-
'data': {
183-
'public_key': '034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192',
182+
'camelCase_pk': {
183+
'publicKey': '034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192',
184184
'signature': '304402200fb4adddd1f1d652b544ea6ab62828a0a65b712ed447e2538db0caebfa68929e02205ecb2e1c63b29879c2ecf1255db506d671c8b3fa6017f67cfd1bf07e6edd1cc8', # noqa
185185
'message': 'Hello World'
186186
},
187+
188+
'snake_case_pk': {
189+
'publickey': '034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192',
190+
'signature': '304402200fb4adddd1f1d652b544ea6ab62828a0a65b712ed447e2538db0caebfa68929e02205ecb2e1c63b29879c2ecf1255db506d671c8b3fa6017f67cfd1bf07e6edd1cc8', # noqa
191+
'message': 'Hello World'
192+
},
187193
'passphrase': 'this is a top secret passphrase'
188194
}
189195
return data

tests/utils/test_message.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,38 @@
44

55

66
def test_signing(message):
7-
result = Message.sign(message['data']['message'], message['passphrase'])
8-
assert result.to_dict() == message['data']
7+
result = Message.sign(message['camelCase_pk']['message'], message['passphrase'])
8+
assert result.to_dict() == message['camelCase_pk']
99

1010

11-
def test_verify(message):
12-
result = Message(**message['data'])
11+
def test_verify_with_publickey(message):
12+
result = Message(**message['snake_case_pk'])
13+
assert result.verify() is True
14+
15+
16+
def test_verify_with_publicKey(message):
17+
result = Message(**message['camelCase_pk'])
1318
assert result.verify() is True
1419

1520

1621
def test_to_dict(message):
17-
result = Message(**message['data'])
18-
assert result.to_dict() == message['data']
22+
result = Message(**message['camelCase_pk'])
23+
assert result.to_dict() == message['camelCase_pk']
24+
25+
26+
def test_to_json_with_publicKey(message):
27+
result = Message(**message['camelCase_pk'])
28+
json_data = result.to_json()
29+
data = json.loads(json_data)
30+
assert data['signature'] == message['camelCase_pk']['signature']
31+
assert data['publicKey'] == message['camelCase_pk']['publicKey']
32+
assert data['message'] == message['camelCase_pk']['message']
1933

2034

21-
def test_to_json(message):
22-
result = Message(**message['data'])
35+
def test_to_json_with_publickey(message):
36+
result = Message(**message['snake_case_pk'])
2337
json_data = result.to_json()
2438
data = json.loads(json_data)
25-
assert data['signature'] == message['data']['signature']
26-
assert data['public_key'] == message['data']['public_key']
27-
assert data['message'] == message['data']['message']
39+
assert data['signature'] == message['snake_case_pk']['signature']
40+
assert data['publickey'] == message['snake_case_pk']['publickey']
41+
assert data['message'] == message['snake_case_pk']['message']

0 commit comments

Comments
 (0)