NAME
base_fmt, base_scan - base-16/32/64/128 encode/decode a byte array
SYNOPSIS
#include <limb/base.h>
ssize_t base_fmt(char *dst, int base, const char *data, size_t dlen, const char *alpha, int strict) ssize_t base_scan(char *dst, int base, const char *data, size_t dlen, const char *alpha, int strict)
DESCRIPTION
The base_fmt
() function will encode the byte array pointed to by data
of
length dlen
bytes into the byte array pointed to by dst
using the base
algorithm specified with base
and the alphabet pointed to be alpha
.
Valid values for base
are 2, 4, 8, 16, 32, 64 and 128 for the corresponding
base. Accordingly the specified alphabet alpha
must be of length 3, 5, 9, 17,
33, 65 and 129 bytes, with the last character to be used for padding.
The output placed into dst
will have necessary padding unless strict
is
non-zero, in which case only one padding character is put when padding is
needed.
Note that it will not be NUL-terminated. If dst
is NULL, the function
simply returns the size required for dst
.
The base_scan
() function will decode the byte array pointed to by data
of
length dlen
into the byte array pointed to be dst
using the base algorithm
specified with base
and the alphabet pointed to by alpha
.
Both arguments base
and alpha
are similar than their counterparts for
base_fmt
(). Argument strict
is similar as well, in that if non-zero it will
require all necessary padding, but with zero it will accept a single padding
character indicating padding.
Additionally, when strict
is non-zero any base-encoded data were at least one
unused bit was set will result in an error.
The encoded data
doesn't have to end with proper padding, that is a single
padding character marking the end of data is enough (as done with base_fmt
()
when strict
is zero). Note that, as with base_fmt
(), the result in dst
will not be NUL-terminated; And that dst
can also be NULL, in which case
only data validation is performed and the length required in dst
is returned.
Both functions implement algorithms that can be used to perform encoding
and decoding as described in RFC 4648, assuming corresponding
alphabet is used (and strict
is non-zero).
RETURN VALUE
Both functions return the length written into dst
- or that would have been
had it not been NULL - on success. Otherwise, they return -1 and set errno
to indicate the error.
ERRORS
The base_fmt
() and base_scan
() functions may fail if :
ERANGE
The base
argument isn't valid.
The base_scan
() function may also fail if :
EINVAL
The input data
is invalid, e.g. contains a character not from alpha
.