1 #ifndef _BASE64_H_ 2 #define _BASE64_H_ 3 #include "first.h" 4 5 #include "buffer.h" 6 7 typedef enum { 8 BASE64_STANDARD, 9 BASE64_URL, 10 } base64_charset; 11 12 size_t li_base64_dec(unsigned char *result, size_t out_length, const char *in, size_t in_length, base64_charset charset); 13 14 unsigned char* buffer_append_base64_decode(buffer *out, const char* in, size_t in_length, base64_charset charset); 15 16 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); 17 #define li_to_base64_no_padding(out, out_length, in, in_length, charset) \ 18 li_base64_enc((out), (out_length), (in), (in_length), (charset), 0) 19 #define li_to_base64(out, out_length, in, in_length, charset) \ 20 li_base64_enc((out), (out_length), (in), (in_length), (charset), 1) 21 22 __attribute_nonnull__() 23 __attribute_returns_nonnull__ 24 char* buffer_append_base64_enc(buffer *out, const unsigned char* in, size_t in_length, base64_charset charset, int pad); 25 26 #define buffer_append_base64_encode_no_padding(out, in, in_length, charset) \ 27 buffer_append_base64_enc((out), (in), (in_length), (charset), 0) 28 #define buffer_append_base64_encode(out, in, in_length, charset) \ 29 buffer_append_base64_enc((out), (in), (in_length), (charset), 1) 30 31 #endif 32