summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorengn33r <engn33r@users.noreply.github.com>2021-05-31 18:34:51 -0400
committerengn33r <engn33r@users.noreply.github.com>2021-05-31 18:34:51 -0400
commit287970efa70adc6224a3f055351a04a4fdaea526 (patch)
treeee248794ea50675c66cde00c6fcd39046fbf925a
parent361c0147c6128995ef7e6da72c97fe5e3633835b (diff)
downloadwebsocket-client-287970efa70adc6224a3f055351a04a4fdaea526.tar.gz
Fix #433 with faster pure Python masking
-rw-r--r--websocket/_abnf.py12
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__ = [