summaryrefslogtreecommitdiff
path: root/src/base64.h
blob: 2e3d7d8b6159196a43c0819763e89737707465c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef _BASE64_H_
#define _BASE64_H_
#include "first.h"

#include "buffer.h"

typedef enum {
	BASE64_STANDARD,
	BASE64_URL,
} base64_charset;

size_t li_base64_dec(unsigned char *result, size_t out_length, const char *in, size_t in_length, base64_charset charset);

unsigned char* buffer_append_base64_decode(buffer *out, const char* in, size_t in_length, base64_charset charset);

size_t li_base64_enc(char* restrict out, size_t out_length, const unsigned char* restrict in, size_t in_length, base64_charset charset, int pad);
#define li_to_base64_no_padding(out, out_length, in, in_length, charset) \
        li_base64_enc((out), (out_length), (in), (in_length), (charset), 0)
#define li_to_base64(out, out_length, in, in_length, charset) \
        li_base64_enc((out), (out_length), (in), (in_length), (charset), 1)

__attribute_nonnull__()
__attribute_returns_nonnull__
char* buffer_append_base64_enc(buffer *out, const unsigned char* in, size_t in_length, base64_charset charset, int pad);

#define buffer_append_base64_encode_no_padding(out, in, in_length, charset) \
        buffer_append_base64_enc((out), (in), (in_length), (charset), 0)
#define buffer_append_base64_encode(out, in, in_length, charset) \
        buffer_append_base64_enc((out), (in), (in_length), (charset), 1)

#endif