Base32
This library provides utilities for converting byte-strings to and from an encoding based on Crockford’s Base32 encoding.
Compared to similar Base32 encodings like RFC 4648, Crockford’s encoding has a few desirable characteristics which make it especially appealing for user-facing use:
- Potentially ambiguous characters, like i, I, l, and L are treated as synonyms. 
- The digits 0 through F have the same value as their hexadecimal counterparts. 
- The letter U is invalid, lowering the surface area for obscene encodings. 
This library deviates from Crockford’s encoding by encoding strings as lower-case by default. Hyphens are also disallowed as spacing and check characters are unimplemented, although this is a shortcoming of the implementation.
1 API
| (require base32) | package: base32 | 
1.1 Encoding and decoding byte-strings
procedure
(base32-decode-bytes b32) → bytes?
b32 : base32? 
procedure
(base32-encode-bytes bs) → base32?
bs : bytes? 
1.2 Encoding and decoding ports
procedure
(base32-decode in [#:close? close?]) → input-port?
in : input-port? close? : boolean? = #t 
If close? is #t, in will be closed once eof is reached.
procedure
(base32-encode in [#:close? close?]) → input-port?
in : input-port? close? : boolean? = #t 
If close? is #t, in will be closed once eof is reached.
1.3 Comparing base32 strings
Because some characters are synonymous, two Base32 encodings may be representationally equivalent but not structurally equivalent.
> (define-values (x y) (values "ABC0123" "abcoi23")) > (equal? x y) #f
> (base32=? x y) #t
> (string<? x y) #t
> (base32<? x y) #f
2 Conversion table
The following table shows the decimal value for each valid base32 character. When encoding, this library always chooses the first base32 representation in the table below.
| base 10 | base 32 | 
| 0 | 0 o O = | 
| 1 | 1 i I l L | 
| 2 | 2 | 
| 3 | 3 | 
| 4 | 4 | 
| 5 | 5 | 
| 6 | 6 | 
| 7 | 7 | 
| 8 | 8 | 
| 9 | 9 | 
| 10 | a A | 
| 11 | b B | 
| 12 | c C | 
| 13 | d D | 
| 14 | e E | 
| 15 | f F | 
| 16 | g G | 
| 17 | h H | 
| 18 | j J | 
| 19 | k K | 
| 20 | m M | 
| 21 | n N | 
| 22 | p P | 
| 23 | q Q | 
| 24 | r R | 
| 25 | s S | 
| 26 | t T | 
| 27 | v V | 
| 28 | w W | 
| 29 | x X | 
| 30 | y Y | 
| 31 | z Z |