]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: base64 - Add high-level data and string encode functions with data stack buffer...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 28 Aug 2019 21:21:31 +0000 (23:21 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:31 +0000 (10:02 +0300)
src/lib/base64.c
src/lib/base64.h

index 5548c612f247fb48c5fa253de0f5055e97f15bfb..7fe51a80985013f09faf749be36929e02871c248 100644 (file)
@@ -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)
index d965a69238306654e0f3d9620789effffd902e13..3e4e110b0edd45006ae9045ef8380daac5806c9b 100644 (file)
@@ -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