MyNixOS website logo
Description

Implements encoders/decoders for basesystems.

This package implements these encoder and decoder methods for numeric basesystems and provides definitions for common basesystems like base16, base58btc, base64, and more.

basesystems

This project code contains for Encoding/Decoding number basesystems in Haskell. It's implemented in a strategy pattern style where BaseSystem is a type-class which provides the encoder and decoder methods:

class BaseSystem a where
  encoder :: a -> ByteString -> String
  decoder :: a -> String -> Maybe ByteString

Then we define data structure representations for a and implement each method with the data from a. For instance, this is how the implementations of base64 and base10 are distinguished.

Example

ghci> import Data.BaseSystem
ghci> import Data.BaseSystems
ghci> import Data.BaseSystem.Internal (packInteger)
ghci>
ghci> encoder base10 (packInteger 123) -- "123"
ghci> decoder base10 "123"             -- Just <123 as binary in ByteString>
ghci> encoder base64 (packInteger 123) -- "ew=="
ghci> decoder base64 "ew=="            -- Just <123 as binary in ByteString>

Coverage

This project aims to eventually implement most if not all of the mulitbase specification's basesytems list.

Currently, the following basesystems are supported:

  • base2
  • base10
  • base16(upper/lower)
  • base32(upper/lower) w/pad + nopad
  • base32hex(lower/upper) w/pad + nopad
  • base58btc
  • base64 w/pad + nopad
  • base64url w/pad + nopad

Unit testing

Since these functions can have such a large amount of inputs/outputs + possible edge cases, we generate test sets in bulk from scripts in the python folder to JSON format. Code for running tests can be found at the main ipfshs repo.

License

This project is free software and is provided under the BSD 3-clause licensing agreement. Copyright (C) 2026 Zoey McBride <[[email protected]]( mailto:[email protected])>.

Metadata

Version

1.0.0.0

Platforms (80)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    uefi
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-uefi
  • aarch64-windows
  • aarch64_be-none
  • arc-linux
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • sh4-linux
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-uefi
  • x86_64-windows