Ticket #933: pkcs7-prepare.patch
File pkcs7-prepare.patch, 4.5 KB (added by , 4 years ago) |
---|
-
xpra/net/protocol.py
317 317 if self.cipher_out: 318 318 proto_flags |= FLAGS_CIPHER 319 319 #note: since we are padding: l!=len(data) 320 padding = (self.cipher_out_block_size - len(data) % self.cipher_out_block_size) * " "321 if len(padding)==0:320 padding_size = self.cipher_out_block_size - (len(data) % self.cipher_out_block_size) 321 if padding_size==0: 322 322 padded = data 323 323 else: 324 padded = data+ padding325 actual_size = payload_size + len(padding)324 padded = data+(" "*padding_size) 325 actual_size = payload_size + padding_size 326 326 assert len(padded)==actual_size, "expected padded size to be %i, but got %i" % (len(padded), actual_size) 327 327 data = self.cipher_out.encrypt(padded) 328 328 assert len(data)==actual_size, "expected encrypted size to be %i, but got %i" % (len(data), actual_size) 329 log("sending %s bytes encrypted with %s padding", payload_size, len(padding))329 log("sending %s bytes encrypted with %s padding", payload_size, padding_size) 330 330 if proto_flags & FLAGS_NOHEADER: 331 331 #for plain/text packets (ie: gibberish response) 332 332 items.append((data, scb, ecb)) … … 660 660 """ 661 661 read_buffer = None 662 662 payload_size = -1 663 padding = None663 padding_size = 0 664 664 packet_index = 0 665 665 compression_level = False 666 666 raw_packets = {} … … 699 699 log.warn("received cipher block but we don't have a cipher to decrypt it with, not an xpra client?") 700 700 self._invalid_header(read_buffer) 701 701 return 702 padding = (self.cipher_in_block_size - data_size % self.cipher_in_block_size) * " "703 payload_size = data_size + len(padding)702 padding_size = self.cipher_in_block_size - (data_size % self.cipher_in_block_size) 703 payload_size = data_size + padding_size 704 704 else: 705 705 #no cipher, no padding: 706 padding = None706 padding_size = 0 707 707 payload_size = data_size 708 708 assert payload_size>0, "invalid payload size: %i" % payload_size 709 709 read_buffer = read_buffer[8:] … … 736 736 #decrypt if needed: 737 737 data = raw_string 738 738 if self.cipher_in and protocol_flags & FLAGS_CIPHER: 739 log("received %s encrypted bytes with %s padding", payload_size, len(padding))739 log("received %s encrypted bytes with %s padding", payload_size, padding_size) 740 740 data = self.cipher_in.decrypt(raw_string) 741 if padding :741 if padding_size > 0: 742 742 def debug_str(s): 743 743 try: 744 744 return list(bytearray(s)) 745 745 except: 746 746 return list(str(s)) 747 if not data.endswith(padding): 747 padtext = " "*padding_size 748 if not data.endswith(padtext): 748 749 log("decryption failed: string does not end with '%s': %s (%s) -> %s (%s)", 749 pad ding, debug_str(raw_string), type(raw_string), debug_str(data), type(data))750 padtext, debug_str(raw_string), type(raw_string), debug_str(data), type(data)) 750 751 self._internal_error("encryption error (wrong key?)") 751 752 return 752 data = data[:- len(padding)]753 data = data[:-padding_size] 753 754 #uncompress if needed: 754 755 if compression_level>0: 755 756 try: … … 800 801 if self._closed: 801 802 return 802 803 payload_size = -1 803 padding = None804 padding_size = 0 804 805 #add any raw packets back into it: 805 806 if raw_packets: 806 807 for index,raw_data in raw_packets.items():