multihash-0.1.0: src/Data/Multihash/Base.hs
module Data.Multihash.Base where
-- import qualified Data.ByteString.Base32 as B32
import qualified Data.ByteString.Base58 as B58
import qualified Data.ByteString.Base64.Lazy as B64
import Data.ByteString.Lazy (ByteString, fromStrict, toStrict)
import Data.Either (Either)
import qualified Data.Hex as B16
-- TODO add Base32 encoding
data BaseEncoding
= Base2 -- ^ Raw binary encoding
| Base16 -- ^ Hexadecimal encoding
| Base58 -- ^ Bitcoin encoding
| Base64
deriving (Show, Read, Eq, Enum, Bounded)
encode :: BaseEncoding -> ByteString -> ByteString
encode Base2 = id
encode Base16 = B16.hex
-- encode Base32 = B32.encode
encode Base58 = fromStrict . B58.encodeBase58 B58.bitcoinAlphabet . toStrict
encode Base64 = B64.encode
decode :: BaseEncoding -> ByteString -> Either String ByteString
decode Base2 = return . id
decode Base16 = B16.unhex
-- decode Base32 = B32.decode
decode Base58 = maybe (Left "Failed to parse") (Right . fromStrict) . B58.decodeBase58 B58.bitcoinAlphabet . toStrict
decode Base64 = B64.decode