diff options
| author | engn33r <engn33r@users.noreply.github.com> | 2021-05-31 18:34:51 -0400 |
|---|---|---|
| committer | engn33r <engn33r@users.noreply.github.com> | 2021-05-31 18:34:51 -0400 |
| commit | 287970efa70adc6224a3f055351a04a4fdaea526 (patch) | |
| tree | ee248794ea50675c66cde00c6fcd39046fbf925a | |
| parent | 361c0147c6128995ef7e6da72c97fe5e3633835b (diff) | |
| download | websocket-client-287970efa70adc6224a3f055351a04a4fdaea526.tar.gz | |
Fix #433 with faster pure Python masking
| -rw-r--r-- | websocket/_abnf.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/websocket/_abnf.py b/websocket/_abnf.py index 554f3b0..558195b 100644 --- a/websocket/_abnf.py +++ b/websocket/_abnf.py @@ -25,6 +25,7 @@ Copyright (C) 2010 Hiroki Ohtani(liris) import array import os import struct +import sys from ._exceptions import * from ._utils import validate_utf8 @@ -42,13 +43,16 @@ try: def _mask(_m, _d): return XorMaskerSimple(_m).process(_d) + except ImportError: # wsaccel is not available, we rely on python implementations. - def _mask(_m, _d): - for i in range(len(_d)): - _d[i] ^= _m[i % 4] + native_byteorder = sys.byteorder - return _d.tobytes() + def _mask(mask_value, data_value): + datalen = len(data_value) + data_value = int.from_bytes(data_value, native_byteorder) + mask_value = int.from_bytes(mask_value * (datalen // 4) + mask_value[: datalen % 4], native_byteorder) + return (data_value ^ mask_value).to_bytes(datalen, native_byteorder) __all__ = [ |
