One thing that I think could have used more explanation: a permutation doesn’t rearrange the order of the bits in the input, it’s a mapping that takes a b-bit string to another b-bit string such that f(x) = f(y) if and only if x = y, i.e. it’s a bijection.

For example, bitwise negation is a permutation (if not particularly secure), even though 00011 isn’t a bitwise permutation of 11100.

One thing that I think could have used more explanation: a permutation doesn’t rearrange the order of the bits in the input, it’s a mapping that takes a b-bit string to another b-bit string such that f(x) = f(y) if and only if x = y, i.e. it’s a bijection.

For example, bitwise negation is a permutation (if not particularly secure), even though 00011 isn’t a bitwise permutation of 11100.