hopefully fixed everything for new sig format

This commit is contained in:
Kevin Froman 2018-05-05 03:03:05 -05:00
parent ff5bdd62f2
commit 908ccbe664
No known key found for this signature in database
GPG Key ID: 0D414D0FE405B63B
3 changed files with 53 additions and 25 deletions

View File

@ -550,37 +550,36 @@ class OnionrCommunicate:
blockContent = self._core.getData(i) blockContent = self._core.getData(i)
try: try:
#blockMetadata = json.loads(self._core.getData(i)).split('}')[0] + '}' #blockMetadata = json.loads(self._core.getData(i)).split('}')[0] + '}'
blockMetadata = self._core.getData(i) blockMetadata = json.loads(blockContent[:blockContent.rfind(b'}') + 1])
blockMetadata = json.loads(blockMetadata[:blockMetadata.rfind(b'}') + 1])
try: try:
blockMetadata = blockMetadata.decode() blockMeta2 = json.loads(blockMetadata['meta'])
except AttributeError: except KeyError:
blockMeta2 = {'type': ''}
pass pass
blockContent = blockContent[blockContent.rfind(b'}') + 1:]
#blockMetadata = json.loads(blockMetadata + '}')
try: try:
blockMetadata['sig'] blockMetadata['sig']
blockMetadata['meta']['id'] blockMeta2['id']
except KeyError: except KeyError:
pass pass
else: else:
blockData = json.dumps(blockMetadata['meta']) + blockMetadata[blockMetadata.rfind(b'}') + 1:] #blockData = json.dumps(blockMetadata['meta']) + blockMetadata[blockMetadata.rfind(b'}') + 1:]
creator = self._utils.getPeerByHashId(blockMetadata['meta']['id']) creator = self._utils.getPeerByHashId(blockMeta2['id'])
try: try:
creator = creator.decode() creator = creator.decode()
except AttributeError: except AttributeError:
pass pass
if self._core._crypto.edVerify(blockContent.split(b'}')[1], creator, blockMetadata['sig'], encodedData=True): if self._core._crypto.edVerify(blockMetaData['meta'] + blockContent, creator, blockMetadata['sig'], encodedData=True):
logger.info(i + ' was signed')
self._core.updateBlockInfo(i, 'sig', 'true') self._core.updateBlockInfo(i, 'sig', 'true')
else: else:
logger.warn(i + ' has an invalid signature')
self._core.updateBlockInfo(i, 'sig', 'false') self._core.updateBlockInfo(i, 'sig', 'false')
try: try:
logger.info('Block type is ' + blockMetadata['type']) logger.info('Block type is ' + blockMeta2['type'])
self._core.updateBlockInfo(i, 'dataType', blockMetadata['type']) self._core.updateBlockInfo(i, 'dataType', blockMeta2['type'])
self.removeBlockFromProcessingList(i) self.removeBlockFromProcessingList(i)
self.removeBlockFromProcessingList(i) self.removeBlockFromProcessingList(i)
except KeyError: except KeyError:

View File

@ -641,6 +641,7 @@ class Core:
metadata = json.dumps(metadata) metadata = json.dumps(metadata)
metadata = metadata.encode() metadata = metadata.encode()
signature = ''
if sign: if sign:
signature = self._crypto.edSign(metadata + data, self._crypto.privKey, encodeResult=True) signature = self._crypto.edSign(metadata + data, self._crypto.privKey, encodeResult=True)
@ -650,9 +651,9 @@ class Core:
ourID = ourID.decode() ourID = ourID.decode()
except AttributeError: except AttributeError:
pass pass
metadata = {'sig': signature, 'meta': metadata.decode()} metadata = {'sig': signature, 'meta': metadata.decode()}
metadata = json.dumps(metadata) metadata = json.dumps(metadata)
metadata = metadata.encode() metadata = metadata.encode()
if len(data) == 0: if len(data) == 0:
logger.error('Will not insert empty block') logger.error('Will not insert empty block')

View File

@ -336,6 +336,41 @@ class OnionrUtils:
continue continue
try: try:
with open('data/blocks/' + i + '.dat', 'r') as potentialMessage: with open('data/blocks/' + i + '.dat', 'r') as potentialMessage:
potentialMessage = potentialMessage.read()
blockMetadata = json.loads(potentialMessage[:potentialMessage.rfind('}') + 1])
blockContent = potentialMessage[potentialMessage.rfind('}') + 1:]
try:
message = self._core._crypto.pubKeyDecrypt(blockContent, encodedData=True, anonymous=True)
except nacl.exceptions.CryptoError as e:
pass
else:
try:
message = message.decode()
except AttributeError:
pass
try:
message = json.loads(message)
except json.decoder.JSONDecodeError:
pass
else:
print('--------------------')
logger.info('Decrypted ' + i + ':')
logger.info(message["msg"])
signer = message["id"]
sig = message["sig"]
if self.validatePubKey(signer):
if self._core._crypto.edVerify(message["msg"], signer, sig, encodedData=True):
logger.info("Good signature by " + signer)
else:
logger.warn("Bad signature by " + signer)
else:
logger.warn("Bad sender id: " + signer)
'''
data = potentialMessage.read().split('}') data = potentialMessage.read().split('}')
message = data[1] message = data[1]
sigResult = '' sigResult = ''
@ -345,14 +380,6 @@ class OnionrUtils:
metadata = json.loads(data[0] + '}') metadata = json.loads(data[0] + '}')
except json.decoder.JSONDecodeError: except json.decoder.JSONDecodeError:
metadata = {} metadata = {}
'''
sigResult = self._core._crypto.edVerify(message, signer, sig, encodedData=True)
#sigResult = False
if sigResult != False:
sigResult = 'Valid signature by ' + signer
else:
sigResult = 'Invalid signature by ' + signer
'''
try: try:
message = self._core._crypto.pubKeyDecrypt(message, encodedData=True, anonymous=True) message = self._core._crypto.pubKeyDecrypt(message, encodedData=True, anonymous=True)
@ -378,6 +405,7 @@ class OnionrUtils:
logger.info('Valid signature by ' + message['id']) logger.info('Valid signature by ' + message['id'])
else: else:
logger.warn('Invalid signature by ' + message['id']) logger.warn('Invalid signature by ' + message['id'])
'''
except FileNotFoundError: except FileNotFoundError:
pass pass