Elixir v1.0.5 Base

This module provides data encoding and decoding functions according to RFC 4648.

This document defines the commonly used base 16, base 32, and base 64 encoding schemes.

Base 16 alphabet

| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
|      0|         0|      4|         4|      8|         8|     12|         C|
|      1|         1|      5|         5|      9|         9|     13|         D|
|      2|         2|      6|         6|     10|         A|     14|         E|
|      3|         3|      7|         7|     11|         B|     15|         F|

Base 32 alphabet

| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
|      0|         A|      9|         J|     18|         S|     27|         3|
|      1|         B|     10|         K|     19|         T|     28|         4|
|      2|         C|     11|         L|     20|         U|     29|         5|
|      3|         D|     12|         M|     21|         V|     30|         6|
|      4|         E|     13|         N|     22|         W|     31|         7|
|      5|         F|     14|         O|     23|         X|       |          |
|      6|         G|     15|         P|     24|         Y|  (pad)|         =|
|      7|         H|     16|         Q|     25|         Z|       |          |
|      8|         I|     17|         R|     26|         2|       |          |

Base 32 (extended hex) alphabet

| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
|      0|         0|      9|         9|     18|         I|     27|         R|
|      1|         1|     10|         A|     19|         J|     28|         S|
|      2|         2|     11|         B|     20|         K|     29|         T|
|      3|         3|     12|         C|     21|         L|     30|         U|
|      4|         4|     13|         D|     22|         M|     31|         V|
|      5|         5|     14|         E|     23|         N|       |          |
|      6|         6|     15|         F|     24|         O|  (pad)|         =|
|      7|         7|     16|         G|     25|         P|       |          |
|      8|         8|     17|         H|     26|         Q|       |          |

Base 64 alphabet

| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
|      0|         A|     17|         R|     34|         i|     51|         z|
|      1|         B|     18|         S|     35|         j|     52|         0|
|      2|         C|     19|         T|     36|         k|     53|         1|
|      3|         D|     20|         U|     37|         l|     54|         2|
|      4|         E|     21|         V|     38|         m|     55|         3|
|      5|         F|     22|         W|     39|         n|     56|         4|
|      6|         G|     23|         X|     40|         o|     57|         5|
|      7|         H|     24|         Y|     41|         p|     58|         6|
|      8|         I|     25|         Z|     42|         q|     59|         7|
|      9|         J|     26|         a|     43|         r|     60|         8|
|     10|         K|     27|         b|     44|         s|     61|         9|
|     11|         L|     28|         c|     45|         t|     62|         +|
|     12|         M|     29|         d|     46|         u|     63|         /|
|     13|         N|     30|         e|     47|         v|       |          |
|     14|         O|     31|         f|     48|         w|  (pad)|         =|
|     15|         P|     32|         g|     49|         x|       |          |
|     16|         Q|     33|         h|     50|         y|       |          |

Base 64 (URL and filename safe) alphabet

| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
|      0|         A|     17|         R|     34|         i|     51|         z|
|      1|         B|     18|         S|     35|         j|     52|         0|
|      2|         C|     19|         T|     36|         k|     53|         1|
|      3|         D|     20|         U|     37|         l|     54|         2|
|      4|         E|     21|         V|     38|         m|     55|         3|
|      5|         F|     22|         W|     39|         n|     56|         4|
|      6|         G|     23|         X|     40|         o|     57|         5|
|      7|         H|     24|         Y|     41|         p|     58|         6|
|      8|         I|     25|         Z|     42|         q|     59|         7|
|      9|         J|     26|         a|     43|         r|     60|         8|
|     10|         K|     27|         b|     44|         s|     61|         9|
|     11|         L|     28|         c|     45|         t|     62|         -|
|     12|         M|     29|         d|     46|         u|     63|         _|
|     13|         N|     30|         e|     47|         v|       |          |
|     14|         O|     31|         f|     48|         w|  (pad)|         =|
|     15|         P|     32|         g|     49|         x|       |          |
|     16|         Q|     33|         h|     50|         y|       |          |

Summary

Functions

Decodes a base 16 encoded string into a binary string

Decodes a base 16 encoded string into a binary string

Decodes a base 32 encoded string into a binary string

Decodes a base 32 encoded string into a binary string

Decodes a base 64 encoded string into a binary string

Decodes a base 64 encoded string into a binary string

Encodes a binary string into a base 16 encoded string

Encodes a binary string into a base 32 encoded string

Encodes a binary string into a base 64 encoded string

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string

Encodes a binary string into a base 32 encoded string with an extended hexadecimal alphabet

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string

Encodes a binary string into a base 64 encoded string with URL and filename safe alphabet

Functions

decode16(string, opts \\ [])

Specs

decode16(binary, Keyword.t) :: {:ok, binary} | :error

Decodes a base 16 encoded string into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

Examples

iex> Base.decode16("666F6F626172")
{:ok, "foobar"}

iex> Base.decode16("666f6f626172", case: :lower)
{:ok, "foobar"}

iex> Base.decode16("666f6F626172", case: :mixed)
{:ok, "foobar"}
decode16!(string, opts \\ [])

Specs

decode16!(binary, Keyword.t) :: binary

Decodes a base 16 encoded string into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

Examples

iex> Base.decode16!("666F6F626172")
"foobar"

iex> Base.decode16!("666f6f626172", case: :lower)
"foobar"

iex> Base.decode16!("666f6F626172", case: :mixed)
"foobar"
decode32(string, opts \\ [])

Specs

decode32(binary, Keyword.t) :: {:ok, binary} | :error

Decodes a base 32 encoded string into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

Examples

iex> Base.decode32("MZXW6YTBOI======")
{:ok, "foobar"}

iex> Base.decode32("mzxw6ytboi======", case: :lower)
{:ok, "foobar"}

iex> Base.decode32("mzXW6ytBOi======", case: :mixed)
{:ok, "foobar"}
decode32!(string, opts \\ [])

Specs

decode32!(binary, Keyword.t) :: binary

Decodes a base 32 encoded string into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

Examples

iex> Base.decode32!("MZXW6YTBOI======")
"foobar"

iex> Base.decode32!("mzxw6ytboi======", case: :lower)
"foobar"

iex> Base.decode32!("mzXW6ytBOi======", case: :mixed)
"foobar"
decode64(string)

Specs

decode64(binary) :: {:ok, binary} | :error

Decodes a base 64 encoded string into a binary string.

Examples

iex> Base.decode64("Zm9vYmFy")
{:ok, "foobar"}
decode64!(string)

Specs

decode64!(binary) :: binary

Decodes a base 64 encoded string into a binary string.

The following alphabet is used both for encoding and decoding:

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

Examples

iex> Base.decode64!("Zm9vYmFy")
"foobar"
encode16(data, opts \\ [])

Specs

encode16(binary, Keyword.t) :: binary

Encodes a binary string into a base 16 encoded string.

Accepts an atom :upper (default) for encoding to upper case characters or :lower for lower case characters.

Examples

iex> Base.encode16("foobar")
"666F6F626172"

iex> Base.encode16("foobar", case: :lower)
"666f6f626172"
encode32(data, opts \\ [])

Specs

encode32(binary, Keyword.t) :: binary

Encodes a binary string into a base 32 encoded string.

Accepts an atom :upper (default) for encoding to upper case characters or :lower for lower case characters.

Examples

iex> Base.encode32("foobar")
"MZXW6YTBOI======"

iex> Base.encode32("foobar", case: :lower)
"mzxw6ytboi======"
encode64(data)

Specs

encode64(binary) :: binary

Encodes a binary string into a base 64 encoded string.

Examples

iex> Base.encode64("foobar")
"Zm9vYmFy"
hex_decode32(string, opts \\ [])

Specs

hex_decode32(binary, Keyword.t) ::
  {:ok, binary} |
  :error

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

Examples

iex> Base.hex_decode32("CPNMUOJ1E8======")
{:ok, "foobar"}

iex> Base.hex_decode32("cpnmuoj1e8======", case: :lower)
{:ok, "foobar"}

iex> Base.hex_decode32("cpnMuOJ1E8======", case: :mixed)
{:ok, "foobar"}
hex_decode32!(string, opts \\ [])

Specs

hex_decode32!(binary, Keyword.t) :: binary

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

Accepts an atom :upper (default) for decoding from upper case characters or :lower for lower case characters. :mixed can be given for mixed case characters.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

Examples

iex> Base.hex_decode32!("CPNMUOJ1E8======")
"foobar"

iex> Base.hex_decode32!("cpnmuoj1e8======", case: :lower)
"foobar"

iex> Base.hex_decode32!("cpnMuOJ1E8======", case: :mixed)
"foobar"
hex_encode32(data, opts \\ [])

Specs

hex_encode32(binary, Keyword.t) :: binary

Encodes a binary string into a base 32 encoded string with an extended hexadecimal alphabet.

Accepts an atom :upper (default) for encoding to upper case characters or :lower for lower case characters.

Examples

iex> Base.hex_encode32("foobar")
"CPNMUOJ1E8======"

iex> Base.hex_encode32("foobar", case: :lower)
"cpnmuoj1e8======"
url_decode64(string)

Specs

url_decode64(binary) :: {:ok, binary} | :error

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

Examples

iex> Base.url_decode64("_3_-_A==")
{:ok, <<255,127,254,252>>}
url_decode64!(string)

Specs

url_decode64!(binary) :: binary

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

Examples

iex> Base.url_decode64!("_3_-_A==")
<<255,127,254,252>>
url_encode64(data)

Specs

url_encode64(binary) :: binary

Encodes a binary string into a base 64 encoded string with URL and filename safe alphabet.

Examples

iex> Base.url_encode64(<<255,127,254,252>>)
"_3_-_A=="