def serialize(self, compact=False):
        """Serializes the object into a JWE token.

        :param compact(boolean): if True generates the compact
         representation, otherwise generates a standard JSON format.

        :raises InvalidJWEOperation: if the object cannot serialized
         with the compact representation and `compact` is True.
        :raises InvalidJWEOperation: if no recipients have been added
         to the object.
        """

        if 'ciphertext' not in self.objects:
            raise InvalidJWEOperation("No available ciphertext")

        if compact:
            for invalid in 'aad', 'unprotected':
                if invalid in self.objects:
                    raise InvalidJWEOperation(
                        "Can't use compact encoding when the '%s' parameter"
                        "is set" % invalid)
            if 'protected' not in self.objects:
                raise InvalidJWEOperation(
                    "Can't use compat encoding without protected headers")
            else:
                ph = json_decode(self.objects['protected'])
                for required in 'alg', 'enc':
                    if required not in ph:
                        raise InvalidJWEOperation(
                            "Can't use compat encoding, '%s' must be in the "
                            "protected header" % required)
            if 'recipients' in self.objects:
                if len(self.objects['recipients']) != 1:
                    raise InvalidJWEOperation("Invalid number of recipients")
                rec = self.objects['recipients'][0]
            else:
                rec = self.objects
            if 'header' in rec:
                # The AESGCMKW algorithm generates data (iv, tag) we put in the
                # per-recipient unpotected header by default. Move it to the
                # protected header and re-encrypt the payload, as the protected
                # header is used as additional authenticated data.
                h = json_decode(rec['header'])
                ph = json_decode(self.objects['protected'])
                nph = self._merge_headers(h, ph)
                self.objects['protected'] = json_encode(nph)
                jh = self._get_jose_header()
                alg, enc = self._get_alg_enc_from_headers(jh)
                self._encrypt(alg, enc, jh)
                del rec['header']

            return '.'.join([base64url_encode(self.objects['protected']),
                             base64url_encode(rec.get('encrypted_key', '')),
                             base64url_encode(self.objects['iv']),
                             base64url_encode(self.objects['ciphertext']),
                             base64url_encode(self.objects['tag'])])
        else:
            obj = self.objects
            enc = {'ciphertext': base64url_encode(obj['ciphertext']),
                   'iv': base64url_encode(obj['iv']),
                   'tag': base64url_encode(self.objects['tag'])}
            if 'protected' in obj:
                enc['protected'] = base64url_encode(obj['protected'])
            if 'unprotected' in obj:
                enc['unprotected'] = json_decode(obj['unprotected'])
            if 'aad' in obj:
                enc['aad'] = base64url_encode(obj['aad'])
            if 'recipients' in obj:
                enc['recipients'] = list()
                for rec in obj['recipients']:
                    e = dict()
                    if 'encrypted_key' in rec:
                        e['encrypted_key'] = \
                            base64url_encode(rec['encrypted_key'])
                    if 'header' in rec:
                        e['header'] = json_decode(rec['header'])
                    enc['recipients'].append(e)
            else:
                if 'encrypted_key' in obj:
                    enc['encrypted_key'] = \
                        base64url_encode(obj['encrypted_key'])
                if 'header' in obj:
                    enc['header'] = json_decode(obj['header'])
            return json_encode(enc)
def serialize ( self , compact = False ) : if 'ciphertext' not in self . objects : raise InvalidJWEOperation ( "No available ciphertext" ) if compact : for invalid in 'aad' , 'unprotected' : if invalid in self . objects : raise InvalidJWEOperation ( "Can't use compact encoding when the '%s' parameter" "is set" % invalid ) if 'protected' not in self . objects : raise InvalidJWEOperation ( "Can't use compat encoding without protected headers" ) else : ph = json_decode ( self . objects [ 'protected' ] ) for required in 'alg' , 'enc' : if required not in ph : raise InvalidJWEOperation ( "Can't use compat encoding, '%s' must be in the " "protected header" % required ) if 'recipients' in self . objects : if len ( self . objects [ 'recipients' ] ) != 1 : raise InvalidJWEOperation ( "Invalid number of recipients" ) rec = self . objects [ 'recipients' ] [ 0 ] else : rec = self . objects if 'header' in rec : h = json_decode ( rec [ 'header' ] ) ph = json_decode ( self . objects [ 'protected' ] ) nph = self . _merge_headers ( h , ph ) self . objects [ 'protected' ] = json_encode ( nph ) jh = self . _get_jose_header ( ) alg , enc = self . _get_alg_enc_from_headers ( jh ) self . _encrypt ( alg , enc , jh ) del rec [ 'header' ] return '.' . join ( [ base64url_encode ( self . objects [ 'protected' ] ) , base64url_encode ( rec . get ( 'encrypted_key' , '' ) ) , base64url_encode ( self . objects [ 'iv' ] ) , base64url_encode ( self . objects [ 'ciphertext' ] ) , base64url_encode ( self . objects [ 'tag' ] ) ] ) else : obj = self . objects enc = { 'ciphertext' : base64url_encode ( obj [ 'ciphertext' ] ) , 'iv' : base64url_encode ( obj [ 'iv' ] ) , 'tag' : base64url_encode ( self . objects [ 'tag' ] ) } if 'protected' in obj : enc [ 'protected' ] = base64url_encode ( obj [ 'protected' ] ) if 'unprotected' in obj : enc [ 'unprotected' ] = json_decode ( obj [ 'unprotected' ] ) if 'aad' in obj : enc [ 'aad' ] = base64url_encode ( obj [ 'aad' ] ) if 'recipients' in obj : enc [ 'recipients' ] = list ( ) for rec in obj [ 'recipients' ] : e = dict ( ) if 'encrypted_key' in rec : e [ 'encrypted_key' ] = base64url_encode ( rec [ 'encrypted_key' ] ) if 'header' in rec : e [ 'header' ] = json_decode ( rec [ 'header' ] ) enc [ 'recipients' ] . append ( e ) else : if 'encrypted_key' in obj : enc [ 'encrypted_key' ] = base64url_encode ( obj [ 'encrypted_key' ] ) if 'header' in obj : enc [ 'header' ] = json_decode ( obj [ 'header' ] ) return json_encode ( enc )
Serializes the object into a JWE token.

        :param compact(boolean): if True generates the compact
         representation, otherwise generates a standard JSON format.

        :raises InvalidJWEOperation: if the object cannot serialized
         with the compact representation and `compact` is True.
        :raises InvalidJWEOperation: if no recipients have been added
         to the object.