The base58 codec uses full length bignum operations for each digit and strchr(pszBase58, *p) to find the value of each base58 digit. I've cleaned up the implementation by:
- using bignum operations with word-sized operands
- using a pre-computed decoding table
- adding comments
- getting rid of useless copy operations
As with my other recent pull-requests I think I've made the source easier to understand and the speedup is just a side benefit.
However, I could not restrain myself and added a last commit which is a much faster version, converting 5 or 10 digits at a time (depending on sizeof(BN_ULONG)). Esulting in an overall speedup of over 10 times.
If your prime interest is in simple code, please pull all but the last commit. If you don't mind a bit longer, but much faster code, pull the whole branch.