Skip to content
Snippets Groups Projects
Commit 3133818c authored by inso's avatar inso
Browse files

Check peer document signatures ( # 411 )

parent d5c4e139
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@ import aiohttp
import time
import asyncio
from duniterpy.documents import Peer, Block, BlockUID, MalformedDocumentError
from duniterpy.key import VerifyingKey
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QTimer
from collections import Counter
......@@ -353,22 +354,25 @@ class Network(QObject):
logging.debug("End of network discovery")
@pyqtSlot(Peer, str)
def handle_new_node(self, peer, pubkey):
pubkeys = [n.pubkey for n in self.nodes]
if peer.pubkey not in pubkeys:
logging.debug("New node found : {0}".format(peer.pubkey[:5]))
try:
node = Node.from_peer(self.currency, peer, pubkey, self.session)
node.refresh(manual=True)
self.add_node(node)
self.nodes_changed.emit()
except InvalidNodeCurrency as e:
logging.debug(str(e))
def handle_new_node(self, peer):
key = VerifyingKey(peer.pubkey)
if key.verify_document(peer):
pubkeys = [n.pubkey for n in self.nodes]
if peer.pubkey not in pubkeys:
logging.debug("New node found : {0}".format(peer.pubkey[:5]))
try:
node = Node.from_peer(self.currency, peer, self.session)
node.refresh(manual=True)
self.add_node(node)
self.nodes_changed.emit()
except InvalidNodeCurrency as e:
logging.debug(str(e))
else:
node = [n for n in self.nodes if n.pubkey == peer.pubkey][0]
if node.peer.blockUID.number < peer.blockUID.number:
node.peer = peer
else:
node = [n for n in self.nodes if n.pubkey == pubkey][0]
if node.peer.blockUID.number < peer.blockUID.number:
node.peer = peer
logging.debug("Wrong document received : {0}".format(peer.signed_raw()))
@pyqtSlot()
def handle_identity_change(self):
......
......@@ -43,7 +43,7 @@ class Node(QObject):
changed = pyqtSignal()
error = pyqtSignal()
identity_changed = pyqtSignal()
neighbour_found = pyqtSignal(Peer, str)
neighbour_found = pyqtSignal(Peer)
def __init__(self, peer, uid, pubkey, block,
state, last_change, last_merkle,
......@@ -105,7 +105,7 @@ class Node(QObject):
return node
@classmethod
def from_peer(cls, currency, peer, pubkey, session):
def from_peer(cls, currency, peer, session):
"""
Factory method to get a node from a peer document.
......@@ -119,7 +119,7 @@ class Node(QObject):
if peer.currency != currency:
raise InvalidNodeCurrency(peer.currency, currency)
node = cls(peer, "", pubkey, None,
node = cls(peer, "", peer.pubkey, None,
Node.OFFLINE, time.time(),
{'root': "", 'leaves': []},
"", "", 0, session)
......@@ -626,8 +626,7 @@ class Node(QObject):
str_doc = "{0}{1}\n".format(peer_data['raw'],
peer_data['signature'])
peer_doc = Peer.from_signed_raw(str_doc)
pubkey = peer_data['pubkey']
self.neighbour_found.emit(peer_doc, pubkey)
self.neighbour_found.emit(peer_doc)
except MalformedDocumentError as e:
logging.debug(str(e))
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment