def parse_messages(messages): if messages is not None: self.log.info("retrieved %s message(s) from the dht" % len(messages)) for message in messages: try: value = objects.Value() value.ParseFromString(message) try: box = Box(self.signing_key.to_curve25519_private_key(), PublicKey(value.valueKey)) ciphertext = value.serializedData plaintext = box.decrypt(ciphertext).decode("zlib") p = objects.PlaintextMessage() p.ParseFromString(plaintext) signature = p.signature p.ClearField("signature") verify_key = nacl.signing.VerifyKey(p.pubkey) verify_key.verify(p.SerializeToString(), signature) h = nacl.hash.sha512(p.pubkey) pow_hash = h[40:] if int(pow_hash[:6], 16) >= 50 or p.sender_guid.encode("hex") != h[:40]: raise Exception("Invalid guid") if p.type == objects.PlaintextMessage.Type.Value("ORDER_CONFIRMATION"): c = Contract( self.db, hash_value=unhexlify(p.subject), testnet=self.protocol.multiplexer.testnet ) c.accept_order_confirmation( self.protocol.get_notification_listener(), confirmation_json=p.message ) elif p.type == objects.PlaintextMessage.Type.Value("RECEIPT"): c = Contract( self.db, hash_value=unhexlify(p.subject), testnet=self.protocol.multiplexer.testnet ) c.accept_receipt( self.protocol.get_notification_listener(), self.protocol.multiplexer.blockchain, receipt_json=p.message, ) elif p.type == objects.PlaintextMessage.Type.Value("DISPUTE_OPEN"): process_dispute( json.loads(p.message, object_pairs_hook=OrderedDict), self.db, self.protocol.get_message_listener(), self.protocol.get_notification_listener(), self.protocol.multiplexer.testnet, ) else: listener.notify(p, signature) except Exception: pass signature = self.signing_key.sign(value.valueKey)[:64] self.kserver.delete(self.kserver.node.id, value.valueKey, signature) except Exception: pass
def rpc_dispute_open(self, sender, pubkey, encrypted): try: box = Box(PrivateKey(self.signing_key.encode(nacl.encoding.RawEncoder)), PublicKey(pubkey)) order = box.decrypt(encrypted) contract = json.loads(order, object_pairs_hook=OrderedDict) process_dispute(contract, self.db, self.get_message_listener(), self.get_notification_listener(), self.multiplexer.testnet) self.router.addContact(sender) self.log.info("Contract dispute opened by %s" % sender) return ["True"] except Exception: self.log.error("unable to parse disputed contract from %s" % sender) return ["False"]
def rpc_dispute_open(self, sender, pubkey, encrypted): try: box = Box(self.signing_key.to_curve25519_private_key(), PublicKey(pubkey)) order = box.decrypt(encrypted) contract = json.loads(order, object_pairs_hook=OrderedDict) process_dispute(contract, self.db, self.get_message_listener(), self.get_notification_listener(), self.multiplexer.testnet) self.router.addContact(sender) self.log.info("Contract dispute opened by %s" % sender) return ["True"] except Exception: self.log.error("unable to parse disputed contract from %s" % sender) return ["False"]
def parse_messages(messages): if messages is not None: self.log.info("retrieved %s message(s) from the dht" % len(messages)) for message in messages: try: value = objects.Value() value.ParseFromString(message) try: box = Box(self.signing_key.to_curve25519_private_key(), PublicKey(value.valueKey)) ciphertext = value.serializedData plaintext = box.decrypt(ciphertext).decode("zlib") p = objects.PlaintextMessage() p.ParseFromString(plaintext) signature = p.signature p.ClearField("signature") verify_key = nacl.signing.VerifyKey(p.pubkey) verify_key.verify(p.SerializeToString(), signature) h = nacl.hash.sha512(p.pubkey) pow_hash = h[40:] if int(pow_hash[:6], 16) >= 50 or p.sender_guid.encode("hex") != h[:40]: raise Exception('Invalid guid') if p.type == objects.PlaintextMessage.Type.Value("ORDER_CONFIRMATION"): c = Contract(self.db, hash_value=unhexlify(p.subject), testnet=self.protocol.multiplexer.testnet) c.accept_order_confirmation(self.protocol.get_notification_listener(), confirmation_json=p.message) elif p.type == objects.PlaintextMessage.Type.Value("RECEIPT"): c = Contract(self.db, hash_value=unhexlify(p.subject), testnet=self.protocol.multiplexer.testnet) c.accept_receipt(self.protocol.get_notification_listener(), self.protocol.multiplexer.blockchain, receipt_json=p.message) elif p.type == objects.PlaintextMessage.Type.Value("DISPUTE_OPEN"): process_dispute(json.loads(p.message, object_pairs_hook=OrderedDict), self.db, self.protocol.get_message_listener(), self.protocol.get_notification_listener(), self.protocol.multiplexer.testnet) else: listener.notify(p, signature) except Exception: pass signature = self.signing_key.sign(value.valueKey)[:64] self.kserver.delete(self.kserver.node.id, value.valueKey, signature) except Exception: pass