Ejemplo n.º 1
0
        def encode(self, is_originating, uri, args=None, kwargs=None):
            """
            Encrypt the given WAMP URI, args and kwargs into an EncodedPayload instance, or None
            if the URI should not be encrypted.
            """
            assert (type(is_originating) == bool)
            assert (type(uri) == six.text_type)
            assert (args is None or type(args) in (list, tuple))
            assert (kwargs is None or type(kwargs) == dict)

            box = self._get_box(is_originating, uri)

            if not box:
                # if we didn't find a crypto box, then return None, which
                # signals that the payload travel unencrypted (normal)
                return None

            payload = {u'uri': uri, u'args': args, u'kwargs': kwargs}
            nonce = random(Box.NONCE_SIZE)
            payload_ser = _json_dumps(payload).encode('utf8')

            payload_encr = box.encrypt(payload_ser, nonce, encoder=RawEncoder)

            # above returns an instance of http://pynacl.readthedocs.io/en/latest/utils/#nacl.utils.EncryptedMessage
            # which is a bytes _subclass_! hence we apply bytes() to get at the underlying plain
            # bytes "scalar", which is the concatenation of `payload_encr.nonce + payload_encr.ciphertext`
            payload_bytes = bytes(payload_encr)
            payload_key = None

            return EncodedPayload(payload_bytes,
                                  u'cryptobox',
                                  u'json',
                                  enc_key=payload_key)
Ejemplo n.º 2
0
 def encode(self, is_originating, uri, args=None, kwargs=None):
     # Value sharing is optional (but required in this example!).
     # It allows for more efficient serialization of repeated structures and makes it possible
     # to serialize cyclic structures (at the cost of some extra line overhead)
     payload = cbor2.dumps([args, kwargs],
                           value_sharing=True,
                           default=default_encoder)
     return EncodedPayload(payload, ENC_ALGO)
Ejemplo n.º 3
0
 def encode(self, is_originating, uri, args=None, kwargs=None):
     # Autobahn wants to send custom payload: convert to an instance
     # of EncodedPayload
     if self.with_timestamp:
         kwargs['value'] = kwargs.pop('reading', -1.)
         payload = json.dumps(kwargs).encode()
     else:
         payload = str(kwargs.get('reading', -1.)).encode()
     return EncodedPayload(payload, u'mqtt')
Ejemplo n.º 4
0
 def encode(self, is_originating, uri, args=None, kwargs=None):
     # Autobahn wants to send custom payload: convert to an instance
     # of EncodedPayload
     payload = struct.pack(self.FORMAT, args[0])
     return EncodedPayload(payload, u'mqtt')