xpra icon
Bug tracker and wiki

Ticket #933: pkcs7-change-pad-char.patch

File pkcs7-change-pad-char.patch, 2.2 KB (added by Antoine Martin, 4 years ago)

splitting the patch into two: this changes the padding char

  • xpra/net/protocol.py

    old new  
    318318                proto_flags |= FLAGS_CIPHER
    319319                #note: since we are padding: l!=len(data)
    320320                padding_size = self.cipher_out_block_size - (len(data) % self.cipher_out_block_size)
    321                 padded = data+(" "*padding_size)
     321                # pad byte value is number of padding bytes added
     322                padded = data+(chr(padding_size)*padding_size)
    322323                actual_size = payload_size + padding_size
    323324                assert len(padded)==actual_size, "expected padded size to be %i, but got %i" % (len(padded), actual_size)
    324325                data = self.cipher_out.encrypt(padded)
     
    741742                                return list(bytearray(s))
    742743                            except:
    743744                                return list(str(s))
    744                         padtext = " "*padding_size
     745                        # pad byte value is number of padding bytes added
     746                        padtext = chr(padding_size)*padding_size
    745747                        if not data.endswith(padtext):
    746                             log("decryption failed: string does not end with '%s': %s (%s) -> %s (%s)",
    747                             padtext, debug_str(raw_string), type(raw_string), debug_str(data), type(data))
    748                             self._internal_error("encryption error (wrong key?)")
    749                             return
     748                            old_padding = (self.cipher_in_block_size - data_size % self.cipher_in_block_size) * " "
     749                            if not data.endswith(old_padding):
     750                                log("decryption failed: string does not end with '%s' or '%s': %s (%s) -> %s (%s)",
     751                                padtext, old_padding, debug_str(raw_string), type(raw_string), debug_str(data), type(data))
     752                                self._internal_error("encryption error (wrong key?)")
     753                                return
    750754                        data = data[:-padding_size]
    751755                #uncompress if needed:
    752756                if compression_level>0: