The first do converts the permutation into a next array, the second do maps f over the input string, then the first output character is computed, the third do computes the remainder of the output, one character at a time, and finally the result is returned as a string. Here are some examples:

Although Blum’s crypto is good, I think that’s a little bit more work than I would like to do each time I need a password. Bruce Schneier suggests that most people have learned how to safeguard the wallets that hold their cash money, so it is reasonable to write down passwords on a piece of paper that you keep in your wallet, an approach I find perfectly sensible.