import qualified Data.ByteString as B import Data.Array import Data.Char import Data.Word import Data.Tuple import Utils import Test.QuickCheck base58Alphabet = arrayFromList "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" base58AlphabetReverse = invertArray base58Alphabet base58Encode :: [Integer] -> String base58Encode [] = "" base58Encode (0:xs) = base58Alphabet ! 0 : base58Encode xs base58Encode x = foldInteger 58 (base58Alphabet !) $ unfoldInteger 256 (toInteger) x base58Decode :: String -> [Integer] base58Decode "" = [] base58Decode ('1':xs) = 0 : base58Decode xs base58Decode x = foldInteger 256 (fromIntegral) $ unfoldInteger 58 (base58AlphabetReverse !) x