/**
 * file: https://github.com/pasis/pppoat/blob/master/src/base64.h
 * description: BASE64 encoding implementation
 * this code is in public domain
 */

#ifndef PPPOAT_BASE64_H
#define PPPOAT_BASE64_H

char *b64_encode(char *buf, size_t len);
char *b64_decode(char *buf, size_t *len);

typedef enum
{
	step_A, step_B, step_C
} base64_encodestep;

typedef struct
{
	base64_encodestep step;
	char result;
	int stepcount;
} base64_encodestate;

void base64_init_encodestate(base64_encodestate* state_in);

char base64_encode_value(char value_in);

int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in);

int base64_encode_blockend(char* code_out, base64_encodestate* state_in);

#endif /* PPPOAT_BASE64_H */
