defmodule ExWs.Mask do import Bitwise, only: [bxor: 2] def apply(mask, data) do l = byte_size(data) mask = cond do l < 5 -> mask l < 9 -> <> l < 13 -> <> l < 17 -> <> l < 21 -> <> l < 25 -> <> l < 29 -> <> true -> <> end unmask(mask, data, []) end defp unmask(_, <<>>, unmasked), do: unmasked defp unmask(<> = m, <>, unmasked) do unmask(m, data, [unmasked, <>]) end for i <- (31..1) do size = 8 * i defp unmask(<>, <>, unmasked) do [unmasked, <>] end end end