in lib/src/copy/web_socket_impl.dart [231:265]
void _unmask(int index, int length, Uint8List buffer) {
const BLOCK_SIZE = 16;
// Skip Int32x4-version if message is small.
if (length >= BLOCK_SIZE) {
// Start by aligning to 16 bytes.
final startOffset = BLOCK_SIZE - (index & 15);
final end = index + startOffset;
for (var i = index; i < end; i++) {
buffer[i] ^= _maskingBytes[_unmaskingIndex++ & 3];
}
index += startOffset;
length -= startOffset;
final blockCount = length ~/ BLOCK_SIZE;
if (blockCount > 0) {
// Create mask block.
var mask = 0;
for (var i = 3; i >= 0; i--) {
mask = (mask << 8) | _maskingBytes[(_unmaskingIndex + i) & 3];
}
final blockMask = Int32x4(mask, mask, mask, mask);
final blockBuffer = Int32x4List.view(buffer.buffer, index, blockCount);
for (var i = 0; i < blockBuffer.length; i++) {
blockBuffer[i] ^= blockMask;
}
final bytes = blockCount * BLOCK_SIZE;
index += bytes;
length -= bytes;
}
}
// Handle end.
final end = index + length;
for (var i = index; i < end; i++) {
buffer[i] ^= _maskingBytes[_unmaskingIndex++ & 3];
}
}