Base-64

Base-64 — Base-64 Encoding and Decoding

Synopsis

#define             GSK_BASE64_GET_ENCODED_LEN          (length)
#define             GSK_BASE64_GET_MAX_DECODED_LEN      (length)
guint               gsk_base64_decode                   (char *dst,
                                                         guint dst_len,
                                                         const char *src,
                                                         gssize src_len);
GByteArray *        gsk_base64_decode_alloc             (const char *src);
void                gsk_base64_encode                   (char *dst,
                                                         const char *src,
                                                         guint src_len);
char *              gsk_base64_encode_alloc             (const char *src,
                                                         gssize src_len);

Description

A collection of methods to deal with base-64 encoding and decoding. Base-64 is defined in RFC 2045, Section 6.8.

The number of terminal = characters is specified in the FAQ such that a base-64 encoded string is always a multiple of 4 bytes long.

XXX: The encoding end of this class probably needs some fixing in light of RFC 2045.

Details

GSK_BASE64_GET_ENCODED_LEN()

#define             GSK_BASE64_GET_ENCODED_LEN(length)

Get the number of bytes needed to encode in base-64 a binary block of data of a given length. This includes space for a terminal = sign, but does not include space for a NUL.

length :

the length of the raw binary string.

GSK_BASE64_GET_MAX_DECODED_LEN()

#define             GSK_BASE64_GET_MAX_DECODED_LEN(length)

Get the maximum number of bytes a base-64 encoded string may require. This assumes that there is no terminal = character, but there may be one, causing the actual number of bytes once decoded to be smaller. The actual number is returned by gsk_base64_decode().

length :

the length of the base64 encoded string.

gsk_base64_decode ()

guint               gsk_base64_decode                   (char *dst,
                                                         guint dst_len,
                                                         const char *src,
                                                         gssize src_len);

Decode a base64-encoded string into binary.

dst :

output area for binary data. Should be GSK_BASE64_GET_MAX_DECODED_LEN(src) long at least.

dst_len :

length of buffer allocated for dst.

src :

base64 encoded data.

src_len :

length of the binary data, or -1 to assume that src is NUL-terminated.

Returns :

number of bytes decoded.

gsk_base64_decode_alloc ()

GByteArray *        gsk_base64_decode_alloc             (const char *src);

Decode a base64-encoded string into binary.

GSK_BASE64_GET_MAX_DECODED_LEN might not be the return value, because it doesn't take a terminate '=' sign into account. The return value should be exactly that if src is not = terminated, or GSK_BASE64_GET_MAX_DECODED_LEN() is only called on the length which precedes the = sign.

src :

base64 encoded data, NUL terminated.

Returns :

the byte-array with the binary data.

gsk_base64_encode ()

void                gsk_base64_encode                   (char *dst,
                                                         const char *src,
                                                         guint src_len);

base64 encodes binary data.

dst :

output base64 encoded string. The result is NOT nul-terminated, but is terminated with an = sign. dst should be exactly GSK_BASE64_GET_ENCODED_LEN(src_len) bytes long.

src :

input binary data.

src_len :

length of src.

gsk_base64_encode_alloc ()

char *              gsk_base64_encode_alloc             (const char *src,
                                                         gssize src_len);

base64 encodes binary data (that does not contain a NULL).

src :

data to base64 encode.

src_len :

length of binary data to encode, or -1 to take src as a NUL-terminated string.

Returns :

an newly allocated base64 encoded NUL-terminated ASCII string.