*/
int base64_scheme_decode(const struct base64_scheme *b64,
+ enum base64_decode_flags flags,
const void *src, size_t src_size, buffer_t *dest)
{
struct base64_decoder dec;
int ret;
- base64_decode_init(&dec, b64, 0);
+ base64_decode_init(&dec, b64, flags);
ret = base64_decode_more(&dec, src, src_size, NULL, dest);
if (ret >= 0)
ret = base64_decode_finish(&dec);
}
buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64,
+ enum base64_decode_flags flags,
const char *str)
{
buffer_t *buf;
size_t len = strlen(str);
buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(len));
- (void)base64_scheme_decode(b64, str, len, buf);
+ (void)base64_scheme_decode(b64, flags, str, len, buf);
return buf;
}
end of line.
*/
int base64_scheme_decode(const struct base64_scheme *b64,
+ enum base64_decode_flags flags,
const void *src, size_t src_size, buffer_t *dest);
/* Decode given string to a buffer allocated from data stack.
variant. See below for specific functions.
*/
buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64,
+ enum base64_decode_flags flags,
const char *str);
/* Returns TRUE if c is a valid encoding character (excluding '=') for the
// NOTE: src_pos_r is deprecated here; to be removed in v2.4 */
i_assert(src_pos_r == NULL);
- return base64_scheme_decode(&base64_scheme, src, src_size, dest);
+ return base64_scheme_decode(&base64_scheme, 0, src, src_size, dest);
}
/* Decode given string to a buffer allocated from data stack. */
static inline buffer_t *t_base64_decode_str(const char *str)
{
- return t_base64_scheme_decode_str(&base64_scheme, str);
+ return t_base64_scheme_decode_str(&base64_scheme, 0, str);
}
/* Returns TRUE if c is a valid base64 encoding character (excluding '=') */
/* Translates base64url data into binary and appends it to dest buffer. See
base64_scheme_decode(). */
static inline int
-base64url_decode(const void *src, size_t src_size, buffer_t *dest)
+base64url_decode(enum base64_decode_flags flags,
+ const void *src, size_t src_size, buffer_t *dest)
{
- return base64_scheme_decode(&base64url_scheme, src, src_size, dest);
+ return base64_scheme_decode(&base64url_scheme, flags,
+ src, src_size, dest);
}
/* Decode given string to a buffer allocated from data stack. */
-static inline buffer_t *t_base64url_decode_str(const char *str)
+static inline buffer_t *
+t_base64url_decode_str(enum base64_decode_flags flags, const char *str)
{
- return t_base64_scheme_decode_str(&base64url_scheme, str);
+ return t_base64_scheme_decode_str(&base64url_scheme, flags, str);
}
/* Returns TRUE if c is a valid base64url encoding character (excluding '=') */
buffer_create_from_data(&buf, t_malloc0(max_decoded_size),
max_decoded_size);
str = &buf;
- ret = base64url_decode(tests[i].input, strlen(tests[i].input),
- str);
+ ret = base64url_decode(0, tests[i].input,
+ strlen(tests[i].input), str);
test_assert_idx(tests[i].ret == ret, i);
test_assert_idx(strlen(tests[i].output) == str_len(str) &&
str_truncate(str, 0);
str_truncate(dest, 0);
base64url_encode(buf, max, str);
- test_assert_idx(base64url_decode(str_data(str), str_len(str),
+ test_assert_idx(base64url_decode(0, str_data(str), str_len(str),
dest) >= 0, i);
test_assert_idx(str_len(dest) == max &&
memcmp(buf, str_data(dest), max) == 0, i);