@@ -45,24 +45,33 @@ static std::string const base64_chars =
45
45
" abcdefghijklmnopqrstuvwxyz"
46
46
" 0123456789+/" ;
47
47
48
+ // / Test whether a character is a valid base64 character
49
+ /* *
50
+ * @param c The character to test
51
+ * @return true if c is a valid base64 character
52
+ */
48
53
static inline bool is_base64 (unsigned char c) {
49
54
return (c == 43 || // +
50
55
(c >= 47 && c <= 57 ) || // /-9
51
56
(c >= 65 && c <= 90 ) || // A-Z
52
57
(c >= 97 && c <= 122 )); // a-z
53
58
}
54
59
55
- inline std::string base64_encode (unsigned char const * bytes_to_encode, unsigned
56
- int in_len)
57
- {
60
+ // / Encode a char buffer into a base64 string
61
+ /* *
62
+ * @param input The input data
63
+ * @param len The length of input in bytes
64
+ * @return A base64 encoded string representing input
65
+ */
66
+ inline std::string base64_encode (unsigned char const * input, size_t len) {
58
67
std::string ret;
59
68
int i = 0 ;
60
69
int j = 0 ;
61
70
unsigned char char_array_3[3 ];
62
71
unsigned char char_array_4[4 ];
63
72
64
- while (in_len --) {
65
- char_array_3[i++] = *(bytes_to_encode ++);
73
+ while (len --) {
74
+ char_array_3[i++] = *(input ++);
66
75
if (i == 3 ) {
67
76
char_array_4[0 ] = (char_array_3[0 ] & 0xfc ) >> 2 ;
68
77
char_array_4[1 ] = ((char_array_3[0 ] & 0x03 ) << 4 ) +
@@ -97,25 +106,38 @@ inline std::string base64_encode(unsigned char const * bytes_to_encode, unsigned
97
106
while ((i++ < 3 )) {
98
107
ret += ' =' ;
99
108
}
100
- }
109
+ }
101
110
102
- return ret;
111
+ return ret;
103
112
}
104
113
105
- inline std::string base64_encode (std::string const & data) {
106
- return base64_encode (reinterpret_cast <const unsigned char *>(data.data ()),data.size ());
114
+ // / Encode a string into a base64 string
115
+ /* *
116
+ * @param input The input data
117
+ * @return A base64 encoded string representing input
118
+ */
119
+ inline std::string base64_encode (std::string const & input) {
120
+ return base64_encode (
121
+ reinterpret_cast <const unsigned char *>(input.data ()),
122
+ input.size ()
123
+ );
107
124
}
108
125
109
- inline std::string base64_decode (std::string const & encoded_string) {
110
- size_t in_len = encoded_string.size ();
126
+ // / Decode a base64 encoded string into a string of raw bytes
127
+ /* *
128
+ * @param input The base64 encoded input data
129
+ * @return A string representing the decoded raw bytes
130
+ */
131
+ inline std::string base64_decode (std::string const & input) {
132
+ size_t in_len = input.size ();
111
133
int i = 0 ;
112
134
int j = 0 ;
113
135
int in_ = 0 ;
114
136
unsigned char char_array_4[4 ], char_array_3[3 ];
115
137
std::string ret;
116
138
117
- while (in_len-- && ( encoded_string [in_] != ' =' ) && is_base64 (encoded_string [in_])) {
118
- char_array_4[i++] = encoded_string [in_]; in_++;
139
+ while (in_len-- && ( input [in_] != ' =' ) && is_base64 (input [in_])) {
140
+ char_array_4[i++] = input [in_]; in_++;
119
141
if (i ==4 ) {
120
142
for (i = 0 ; i <4 ; i++) {
121
143
char_array_4[i] = static_cast <unsigned char >(base64_chars.find (char_array_4[i]));
0 commit comments