If you are going to use SHA1:

Since SHA1 returns exactly 20 octets, it will help if you feed it somewhat more than 20 octets' worth of data.

I notice that the von Neumann extractor throws away some pairs of bits ("00" and "11"). I would not suggest you use them directly (after all, there is a reason you are throwing them away), but if you keep a

*count* of discarded pairs, you could append this count to the 20 octets from the generator (using the count as a 21st and maybe 22nd octet), so you will have more octets to feed your hash function. (It also might be a good idea to keep an eye on this count itself, in case it seems a bit

*too* regular.)

An alternative to a von Neumann extractor:

2-out-of-5 code(Note that a 3-out-of-5 code can be negated and interpreted as a 2-out-of-5 code.)

These eat bits and give you decimal digits, and yes, sometimes we want decimal digits. (Think bank account PIN numbers, credit card numbers, etc.)

I wonder how good your gadget would do at generating random decimal digits.

You could also generate random ternary digits by taking bits in groups of three and seeing which bit (1st, 2nd, or 3rd) is different from the others.

If you generate two random numbers in different bases (say, one in binary and one in ternary), you could convert them both to the same base and add them.