commit 73e7ffaed410124daecc8edb3fab662a6414e8ee Author: David Fifield david@bamsoftware.com Date: Sat Apr 7 04:36:19 2012 -0700
More efficient apply_mask. --- connector.py | 22 +++++++++++++++++----- 1 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/connector.py b/connector.py index 23de63d..1689c33 100755 --- a/connector.py +++ b/connector.py @@ -1,5 +1,6 @@ #!/usr/bin/env python
+import array import base64 import cStringIO import getopt @@ -121,11 +122,22 @@ def format_addr(addr):
def apply_mask(payload, mask_key): - result = [] - for i, c in enumerate(payload): - mc = chr(ord(payload[i]) ^ ord(mask_key[i%4])) - result.append(mc) - return "".join(result) + result = array.array("l") + result.fromstring(payload[:len(payload) // 4 * 4]) + m, = struct.unpack("=l", mask_key) + i = 0 + while i < len(result): + result[i] ^= m + i += 1 + result = result.tostring() + i *= 4 + if i < len(payload): + remainder = [] + while i < len(payload): + remainder.append(chr(ord(payload[i]) ^ ord(mask_key[i%4]))) + i += 1 + result = result + "".join(remainder) + return result
class WebSocketFrame(object): def __init__(self):
tor-commits@lists.torproject.org