Move message checksum logic to crypto.py

This commit is contained in:
Kristóf Tóth 2018-07-15 17:30:19 +02:00
parent b2cb60ef02
commit 5770e29733
2 changed files with 9 additions and 10 deletions

View File

@ -4,6 +4,7 @@
from functools import wraps from functools import wraps
from base64 import b64encode, b64decode from base64 import b64encode, b64decode
from copy import deepcopy from copy import deepcopy
from hashlib import md5
from cryptography.hazmat.backends import default_backend from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.hashes import SHA256 from cryptography.hazmat.primitives.hashes import SHA256
@ -13,6 +14,10 @@ from cryptography.exceptions import InvalidSignature
from tfw.networking import message_bytes from tfw.networking import message_bytes
def message_checksum(message):
return md5(message_bytes(message)).hexdigest()
def sign_message(key, message): def sign_message(key, message):
signature = HMAC(key, message_bytes(message)).signature signature = HMAC(key, message_bytes(message)).signature
message['signature'] = b64encode(signature).decode() message['signature'] = b64encode(signature).decode()

View File

@ -2,10 +2,9 @@
# All Rights Reserved. See LICENSE file for details. # All Rights Reserved. See LICENSE file for details.
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from json import dumps
from hashlib import md5
from tfw.networking.event_handlers import ServerConnector from tfw.networking.event_handlers import ServerConnector
from tfw.crypto import message_checksum
from tfw.config.logs import logging from tfw.config.logs import logging
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -82,7 +81,7 @@ class EventHandlerBase(ABC):
Note that you can subscribe to the same key several times in which Note that you can subscribe to the same key several times in which
case you will need to unsubscribe multiple times in order to stop case you will need to unsubscribe multiple times in order to stop
receiving events. receiving events.
:param keys: list of keys to subscribe to :param keys: list of keys to subscribe to
""" """
for key in keys: for key in keys:
@ -152,7 +151,7 @@ class BroadcastingEventHandler(EventHandlerBase, ABC):
self.own_message_hashes = [] self.own_message_hashes = []
def event_handler_callback(self, message): def event_handler_callback(self, message):
message_hash = self.hash_message(message) message_hash = message_checksum(message)
if message_hash in self.own_message_hashes: if message_hash in self.own_message_hashes:
self.own_message_hashes.remove(message_hash) self.own_message_hashes.remove(message_hash)
@ -160,10 +159,5 @@ class BroadcastingEventHandler(EventHandlerBase, ABC):
response = self.dispatch_handling(message) response = self.dispatch_handling(message)
if response: if response:
self.own_message_hashes.append(self.hash_message(response)) self.own_message_hashes.append(message_checksum(response))
self.server_connector.broadcast(response) self.server_connector.broadcast(response)
@staticmethod
def hash_message(message):
message_bytes = dumps(message, sort_keys=True).encode()
return md5(message_bytes).hexdigest()