diff options
-rw-r--r-- | src/libcryptobox/base64/base64.c | 24 | ||||
-rw-r--r-- | src/libcryptobox/cryptobox.h | 9 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/libcryptobox/base64/base64.c b/src/libcryptobox/base64/base64.c index b4ddd3135..ff08b9a80 100644 --- a/src/libcryptobox/base64/base64.c +++ b/src/libcryptobox/base64/base64.c @@ -146,3 +146,27 @@ base64_test (bool generic, size_t niters, size_t len) return cycles; } + + +gboolean +rspamd_cryptobox_base64_is_valid (const gchar *in, gsize inlen) +{ + const guchar *p, *end; + + if (inlen == 0) { + return FALSE; + } + + p = in; + end = in + inlen; + + while (p < end && *p != '=') { + if (!g_ascii_isspace (*p)) { + if (base64_table_dec[*p] == 255) { + return FALSE; + } + } + } + + return TRUE; +}
\ No newline at end of file diff --git a/src/libcryptobox/cryptobox.h b/src/libcryptobox/cryptobox.h index 1d48c06e5..016e58fc2 100644 --- a/src/libcryptobox/cryptobox.h +++ b/src/libcryptobox/cryptobox.h @@ -399,4 +399,13 @@ guint64 rspamd_cryptobox_fast_hash_specific ( */ gboolean rspamd_cryptobox_base64_decode (const gchar *in, gsize inlen, guchar *out, gsize *outlen); + +/** + * Returns TRUE if data looks like a valid base64 string + * @param in + * @param inlen + * @return + */ +gboolean rspamd_cryptobox_base64_is_valid (const gchar *in, gsize inlen); + #endif /* CRYPTOBOX_H_ */ |