diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-05-07 12:25:11 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-05-07 12:25:11 +0100 |
commit | 045971cbb8d2544d3b077e3ed2c89d48aedd75a4 (patch) | |
tree | 233d2e57f9941d3e7206897e0f1e98ff145d0d5b /test/rspamd_cryptobox_test.c | |
parent | 24f4bdee9db31af467f8d23992555d1a39435fb5 (diff) | |
download | rspamd-045971cbb8d2544d3b077e3ed2c89d48aedd75a4.tar.gz rspamd-045971cbb8d2544d3b077e3ed2c89d48aedd75a4.zip |
Add unit test for cryptobox.
Diffstat (limited to 'test/rspamd_cryptobox_test.c')
-rw-r--r-- | test/rspamd_cryptobox_test.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/test/rspamd_cryptobox_test.c b/test/rspamd_cryptobox_test.c new file mode 100644 index 000000000..171ee7092 --- /dev/null +++ b/test/rspamd_cryptobox_test.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2015, Vsevolod Stakhov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "config.h" +#include "main.h" +#include "shingles.h" +#include "fstring.h" +#include "ottery.h" +#include "cryptobox.h" + +static const int mapping_size = 64 * 8192; +static const int max_seg = 1024; + +static void * +create_mapping (int mapping_len, guchar **beg, guchar **end) +{ + void *map; + int psize = getpagesize (); + + map = mmap (NULL, mapping_len + psize * 3, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_SHARED, -1, 0); + g_assert (map != 0); + mprotect (map, psize, PROT_NONE); + /* Misalign pointer */ + *beg = ((guchar *)map) + psize + 1; + *end = *beg + mapping_len; + mprotect (*beg + mapping_len - 1 + psize, psize, PROT_NONE); + + return map; +} + +static void +check_result (const rspamd_nm_t key, const rspamd_nonce_t nonce, + const rspamd_sig_t mac, guchar *begin, guchar *end) +{ + guint64 *t = (guint64 *)begin; + + g_assert (rspamd_cryptobox_decrypt_nm_inplace (begin, end - begin, nonce, key, + mac)); + + while (t < (guint64 *)end) { + g_assert (*t == 0); + t ++; + } +} + +void +rspamd_cryptobox_test_func (void) +{ + void *map; + guchar *begin, *end; + rspamd_nm_t key; + rspamd_nonce_t nonce; + rspamd_sig_t mac; + struct rspamd_cryptobox_segment *seg; + double t1, t2; + + map = create_mapping (mapping_size, &begin, &end); + + ottery_rand_bytes (key, sizeof (key)); + ottery_rand_bytes (nonce, sizeof (nonce)); + + memset (mac, 0, sizeof (mac)); + memset (begin, 0, end - begin); + seg = g_slice_alloc0 (sizeof (*seg) * max_seg); + + /* Test baseline */ + t1 = rspamd_get_ticks (); + rspamd_cryptobox_encrypt_nm_inplace (begin, end - begin, nonce, key, mac); + t2 = rspamd_get_ticks (); + check_result (key, nonce, mac, begin, end); + + msg_info ("baseline encryption: %.6f", t2 - t1); + /* A single chunk as vector */ + seg[0].data = begin; + seg[0].len = end - begin; + t1 = rspamd_get_ticks (); + rspamd_cryptobox_encryptv_nm_inplace (seg, 1, nonce, key, mac); + t2 = rspamd_get_ticks (); + + check_result (key, nonce, mac, begin, end); + + msg_info ("bulk encryption: %.6f", t2 - t1); +} |