-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbase64.h
executable file
·104 lines (74 loc) · 2.31 KB
/
base64.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* @file
* Base64 Encoder/Decoder header.
* <P>
* <p>Encodes and decodes to and from Base64 notation.</p>
* <p>This is part of the libb64 project, and has been placed in the public domain.</p>
* <p>Homepage: <a href="http://sourceforge.net/projects/libb64">http://sourceforge.net/projects/libb64</a>.</p>
*
* @code
* char *input = "Hello";
* char encoded[32];
* base64_encode(input, strlen(input), encoded, sizeof(encoded));
* @endcode
*
* @since January 25, 2012
*/
#ifndef BASE64_H
# define BASE64_H
/* Get size_t. */
# include <stddef.h>
/* Get bool. */
# include <stdbool.h>
/* Get malloc. */
# include <stdlib.h>
/* Get strchr. */
# include <string.h>
/**
* Determines if the given character is within the Base64 encoding character set.
*/
extern bool isbase64(char ch);
/**
* Base64 encodes the given input character array to the given output buffer.
*/
extern void base64_encode(const char *, size_t, char *, size_t);
extern size_t base64_encode_alloc(const char *, size_t, char **);
/**
* Base64 decodes the given input character array to the given output buffer.
*/
extern bool base64_decode(const char *, size_t, char *, size_t *);
extern size_t base64_decode_alloc(const char *, size_t, char **, size_t *);
/*
cdecode.h - c header for a base64 decoding algorithm
This is part of the libb64 project, and has been placed in the public domain.
For details, see http://sourceforge.net/projects/libb64
*/
typedef enum
{
step_a, step_b, step_c, step_d
} base64_decodestep;
typedef struct
{
base64_decodestep step;
char plainchar;
} base64_decodestate;
void base64_init_decodestate(base64_decodestate* state_in);
int base64_decode_value(char value_in);
int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in);
size_t base64_decoded_size(size_t);
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);
size_t base64_encoded_size(size_t);
int base64_encode_blockend(char* code_out, base64_encodestate* state_in);
#endif /* BASE64_H */