From 7b1b3fb018db67bd972aa979178121bb5d2ac8bc Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Thu, 29 Aug 2019 00:04:54 +0200 Subject: [PATCH] lib: base64 - Add high-level data decode functions with data stack buffer output. Similar functions accepting C string input already exist. --- src/lib/base64.c | 11 +++++------ src/lib/base64.h | 37 ++++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/lib/base64.c b/src/lib/base64.c index 8e80b48b89..5548c612f2 100644 --- a/src/lib/base64.c +++ b/src/lib/base64.c @@ -701,15 +701,14 @@ int base64_scheme_decode(const struct base64_scheme *b64, return ret; } -buffer_t *t_base64_scheme_decode_str(const struct base64_scheme *b64, - enum base64_decode_flags flags, - const char *str) +buffer_t *t_base64_scheme_decode(const struct base64_scheme *b64, + enum base64_decode_flags flags, + const void *src, size_t src_size) { buffer_t *buf; - size_t len = strlen(str); - buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(len)); - (void)base64_scheme_decode(b64, flags, str, len, buf); + buf = t_buffer_create(MAX_BASE64_DECODED_SIZE(src_size)); + (void)base64_scheme_decode(b64, flags, src, src_size, buf); return buf; } diff --git a/src/lib/base64.h b/src/lib/base64.h index fb3a257ac1..2debd420ad 100644 --- a/src/lib/base64.h +++ b/src/lib/base64.h @@ -222,14 +222,25 @@ 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 data to a buffer allocated from data stack. + + The b64 parameter is the definition of the particular Base 64 encoding scheme + that is expected. See below for specific functions. + */ +buffer_t *t_base64_scheme_decode(const struct base64_scheme *b64, + enum base64_decode_flags flags, + const void *src, size_t src_size); /* Decode given string to a buffer allocated from data stack. - The decmap is the mapping table used for the specific base64 encoding - variant. See below for specific functions. + The b64 parameter is the definition of the particular Base 64 encoding scheme + that is expected. 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); +static inline buffer_t * +t_base64_scheme_decode_str(const struct base64_scheme *b64, + enum base64_decode_flags flags, const char *str) +{ + return t_base64_scheme_decode(b64, flags, str, strlen(str)); +} /* Returns TRUE if c is a valid encoding character (excluding '=') for the provided base64 mapping table */ @@ -267,6 +278,14 @@ base64_decode(const void *src, size_t src_size, size_t *src_pos_r ATTR_UNUSED, return base64_scheme_decode(&base64_scheme, 0, src, src_size, dest); } +/* Decode given data to a buffer allocated from data stack. */ +static inline buffer_t * +t_base64_decode(enum base64_decode_flags flags, + const void *src, size_t src_size) +{ + return t_base64_scheme_decode(&base64_scheme, flags, src, src_size); +} + /* Decode given string to a buffer allocated from data stack. */ static inline buffer_t *t_base64_decode_str(const char *str) { @@ -302,6 +321,14 @@ base64url_decode(enum base64_decode_flags flags, src, src_size, dest); } +/* Decode given data to a buffer allocated from data stack. */ +static inline buffer_t * +t_base64url_decode(enum base64_decode_flags flags, + const void *src, size_t src_size) +{ + return t_base64_scheme_decode(&base64url_scheme, flags, src, src_size); +} + /* Decode given string to a buffer allocated from data stack. */ static inline buffer_t * t_base64url_decode_str(enum base64_decode_flags flags, const char *str) -- 2.47.3