diff options
Diffstat (limited to 'src/libcryptobox/base64/base64.c')
-rw-r--r-- | src/libcryptobox/base64/base64.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libcryptobox/base64/base64.c b/src/libcryptobox/base64/base64.c index 361bfff64..a0115cad3 100644 --- a/src/libcryptobox/base64/base64.c +++ b/src/libcryptobox/base64/base64.c @@ -18,6 +18,8 @@ #include "cryptobox.h" #include "base64.h" #include "platform_config.h" +#include "str_util.h" +#include "contrib/libottery/ottery.h" extern unsigned long cpu_config; const uint8_t @@ -100,3 +102,34 @@ rspamd_cryptobox_base64_decode (const gchar *in, gsize inlen, { return base64_opt->decode (in, inlen, out, outlen); } + +size_t +base64_test (bool generic, size_t niters, size_t len) +{ + size_t cycles; + guchar *in, *out, *tmp; + const base64_impl_t *impl; + gsize outlen; + + g_assert (len > 0); + in = g_malloc (len); + tmp = g_malloc (len); + ottery_rand_bytes (in, len); + + impl = generic ? &base64_list[0] : base64_opt; + + out = rspamd_encode_base64 (in, len, 0, &outlen); + impl->decode (out, outlen, tmp, &len); + + g_assert (memcmp (in, tmp, len) == 0); + + for (cycles = 0; cycles < niters; cycles ++) { + impl->decode (out, outlen, in, &len); + } + + g_free (in); + g_free (tmp); + g_free (out); + + return cycles; +} |