Optionally restrict a token to a set of addresses

Numerous projects want this feature to try to comply with KYC/AML laws. This is my first cut at creating a list of addresses, and referring to the list when creating a property such that the property is restricted to being used only by addresses on the list.
The language is a bit flawed: a public key hash has a length 20 bytes and used in most standard transaction. Base58 encoding, checksums, versions and so on are "on top". This sounds as if you start from 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM to get to 00010966776006953d5567439e5e39f86a0d273bee, but it's actually the other way around and it's more than just removing the checksum. And what is "hash step of creating a bitcoin address"?

This helps and is a good overview of the steps involved:
https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses