code: def mask(mask_key, data):
          
          if data is None:
              data = ""
  
          if isinstance(mask_key, six.text_type):
              mask_key = six.b(mask_key)
  
          if isinstance(data, six.text_type):
              data = six.b(data)
  
          if numpy:
              origlen = len(data)
              _mask_key = mask_key[3] << 24 | mask_key[2] << 16 | mask_key[1] << 8 | mask_key[0]
  
              # We need data to be a multiple of four...
              data += bytes(" " * (4 - (len(data) % 4)), "us-ascii")
              a = numpy.frombuffer(data, dtype="uint32")
              masked = numpy.bitwise_xor(a, [_mask_key]).astype("uint32")
              if len(data) > origlen:
                return masked.tobytes()[:origlen]
              return masked.tobytes()
          else:
              _m = array.array("B", mask_key)
              _d = array.array("B", data)
              return _mask(_m, _d)
docs: mask or unmask data. Just do xor for each byte
  
          mask_key: 4 byte string(byte).
  
          data: data to mask/unmask.