limb 0.2.0

2024-01-09

base_fmt(3)
limb manual
base_fmt(3)

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.

Information

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.

SEE ALSO

base32_fmt(3), base64_fmt(3)

limb 0.1.0
2023-07-24
base_fmt(3)