From 75a5b84cd10f46eb3c36e260bcd512a92e4ebdde Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Wed, 28 Aug 2019 23:21:31 +0200 Subject: [PATCH] lib: base64 - Add high-level data and string encode functions with data stack buffer output. --- src/lib/base64.c | 13 +++++++++++++ src/lib/base64.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/lib/base64.c b/src/lib/base64.c index 5548c612f2..7fe51a8098 100644 --- a/src/lib/base64.c +++ b/src/lib/base64.c @@ -686,6 +686,19 @@ int base64_decode_finish(struct base64_decoder *dec) * Generic Base64 API */ +buffer_t *t_base64_scheme_encode(const struct base64_scheme *b64, + enum base64_encode_flags flags, + size_t max_line_len, + const void *src, size_t src_size) +{ + buffer_t *buf; + + buf = t_buffer_create(MAX_BASE64_ENCODED_SIZE(src_size)); + base64_scheme_encode(b64, flags, max_line_len, src, src_size, buf); + return buf; +} + + int base64_scheme_decode(const struct base64_scheme *b64, enum base64_decode_flags flags, const void *src, size_t src_size, buffer_t *dest) diff --git a/src/lib/base64.h b/src/lib/base64.h index d965a69238..3e4e110b0e 100644 --- a/src/lib/base64.h +++ b/src/lib/base64.h @@ -209,6 +209,20 @@ base64_scheme_encode(const struct base64_scheme *b64, base64_encode_finish(&enc, dest); } +buffer_t *t_base64_scheme_encode(const struct base64_scheme *b64, + enum base64_encode_flags flags, + size_t max_line_len, + const void *src, size_t src_size); + +static inline buffer_t * +t_base64_scheme_encode_str(const struct base64_scheme *b64, + enum base64_encode_flags flags, size_t max_line_len, + const char *src) +{ + return t_base64_scheme_encode(b64, flags, max_line_len, + src, strlen(src)); +} + /* Translates some variant of Base64 data into binary and appends it to dest buffer. dest may point to same buffer as src. Returns 1 if all ok, 0 if end of Base64 data found, -1 if data is invalid. @@ -264,6 +278,22 @@ base64_encode(const void *src, size_t src_size, buffer_t *dest) base64_scheme_encode(&base64_scheme, 0, 0, src, src_size, dest); } +static inline buffer_t * +t_base64_encode(enum base64_encode_flags flags, size_t max_line_len, + const void *src, size_t src_size) +{ + return t_base64_scheme_encode(&base64_scheme, flags, max_line_len, + src, src_size); +} + +static inline buffer_t * +t_base64_encode_str(enum base64_encode_flags flags, size_t max_line_len, + const char *src) +{ + return t_base64_scheme_encode(&base64_scheme, flags, max_line_len, + src, strlen(src)); +} + /* Translates base64 data into binary and appends it to dest buffer. See base64_scheme_decode(). @@ -314,6 +344,22 @@ base64url_encode(enum base64_encode_flags flags, size_t max_line_len, src, src_size, dest); } +static inline buffer_t * +t_base64url_encode(enum base64_encode_flags flags, size_t max_line_len, + const void *src, size_t src_size) +{ + return t_base64_scheme_encode(&base64url_scheme, flags, max_line_len, + src, src_size); +} + +static inline buffer_t * +t_base64url_encode_str(enum base64_encode_flags flags, size_t max_line_len, + const char *src) +{ + return t_base64_scheme_encode(&base64url_scheme, flags, max_line_len, + src, strlen(src)); +} + /* Translates base64url data into binary and appends it to dest buffer. See base64_scheme_decode(). */ static inline int -- 2.47.3